从严格的pragma中免除一段perl代码



我有一段遗留的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提出这个问题,看看他们的答案

最新更新