为什么mysql.pm中的全局变量不被声明为我们的?

时间:2011-07-15 08:16:23

标签: perl variables

引自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;并使用此模块的所有程序都没有发出任何警告。

为什么?

2 个答案:

答案 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也不会抱怨。