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