cel*_*eno 2 perl strict dbi bareword
我有一段遗留的 perl 代码,它使用perl DBI和类似的结构
$db->bind_param(1, $some_blob, {TYPE => SQL_BLOB});
其中 SQL_BLOB 是一个裸词。我想在同一个文件中使用严格的编译指示,但它会抱怨裸字。('在使用“严格的subs”时不允许使用裸字“SQL_BLOB”')我可以以某种方式免除此行的严格检查吗?
虽然您确实可以关闭strict编译指示,但这并不能解决您的问题。您将仅将值“SQL_BLOB”作为类型传递,但bind_param不会识别它。
您需要添加一个导入:
use DBI qw(:sql_types);
如果您已经在使用useDBI,那么请添加:sql_types您从中导入的内容。
该strict用法是词法
此编译指示的效果仅限于当前文件或作用域块。
它也可以在一个范围内关闭。所以
use strict;
...
{
    no strict 'subs';
    $db->bind_param(1, $some_blob, {TYPE => SQL_BLOB});
}
# strict is back on
编辑
但是,上面的内容只能容忍裸字,而bind_param仍然不知道那是什么(整数常量)。这是import通过使用:sql_types 导入标签-ing 这样的常量来解决的;请参阅DBI 常量。无论如何,这是满足strict.
感谢 Andy Lester 提出这个问题,请参阅他们的回答