引自mysql.pm
:
3 package DBD::mysql;
4 use strict;
。。。。
17 $err = 0;>--# holds error code for DBI::err
18 $errstr = "";>--# holds error string for DBI::errstr
19 $drh = undef;>--# holds driver handle once initialised
奇怪的是,use warnings;
并使用此模块的所有程序都没有发出任何警告。
为什么?
答案 0 :(得分:8)
来源的第5行:
use vars qw(@ISA $VERSION $err $errstr $drh);
请参阅use vars文档。
这是我们能够在将our
引入Perl之前使全局变量和严格共存的方法之一。虽然它现在被认为是“过时的”(根据文档),但它仍然存在于实际代码中。我猜在某些情况下它符合类别,“如果没有破坏,请不要修复它。”你找到了其中一个案例。
答案 1 :(得分:6)
这些变量在第5行使用vars
编译指示预先声明:
use vars qw(@ISA $VERSION $err $errstr $drh);
这就是为什么即使use strict
生效,Perl也不会抱怨。