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

问题描述

我有一段遗留的 perl 代码,它使用 perl DBI 和类似的结构

$db->bind_param(1,$some_blob,{TYPE => sql_BLOB});

其中 sql_BLOB 是一个裸词。我想在同一个文件中使用严格的编译指示,但它会抱怨裸字。 (“使用“严格子项”时不允许使用裸字“sql_BLOB”)我可以以某种方式免除此行的严格检查吗?

解决方法

虽然您确实可以关闭 strict 编译指示,但这并不能解决您的问题。您只需将值“SQL_BLOB”作为类型传递,但 bind_param 不会识别它。

您需要添加导入:

use DBI qw(:sql_types);

如果您已经在 use 使用 DBI,请将 :sql_types 添加到您从中导入的内容中。

,

strict pragma 是词法

此编译指示的效果仅限于当前文件或作用域块。

它也可以在一个范围内关闭。所以

use strict;

...

{
    no strict 'subs';

    $db->bind_param(1,$some_blob,{TYPE => SQL_BLOB});
}

# strict is back on

编辑

然而,上面只会容忍裸字,而 bind_param 仍然不知道那是什么(整数常量)。这是通过使用 import import tag; :sql_types-ing 这样的常量来解决的;见DBI Constants。无论如何,这是满足 strict 的一种更优越的方式。

感谢 Andy Lester 提出这个问题,请参阅他们的 answer