2

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

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

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

4

2 回答 2

6

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

您需要添加一个导入:

use DBI qw(:sql_types);

如果您已经在使用useDBI,那么添加:sql_types到您从中导入的内容中。

于 2021-03-23T21:21:51.473 回答
5

严格的pragma是词法的

此编译指示的效果仅限于当前文件或范围块。

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

use strict;

...

{
    no strict 'subs';

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

# strict is back on

编辑

但是,上述内容只会容忍裸词,而bind_param仍然不知道那是什么(整数常量)。这可以通过使用导入标签import-ing 这样的常量来解决;请参阅DBI 常量。无论如何,这是满足.:sql_types strict

感谢 Andy Lester 提出这个问题,看看他们的回答

于 2021-03-23T21:13:55.437 回答