perl的:模块间变量使用(perl: inter-module variable use)

2019-07-30 23:34发布

我有一个模块misc可变$verbose

use strict;
use diagnostics;
package misc;
my $verbose = 1;

和模块mymod其使用misc

use strict;
use diagnostics;
use misc;
package mymod;
sub mysub ($) {
  ...
  ($misc::verbose > 0) and print "verbose!\n";
}

其是,反过来,通过使用myprog

use strict;
use diagnostics;
use misc;
use mymod;
mymod::mysub("foo");

当我执行myprog ,我得到这样的警告:

Use of uninitialized value $misc::verbose in numeric gt (>) at mymod.pm line ...

我究竟做错了什么?

Answer 1:

mymod.pm你应该使用:

our $verbose = 1;

代替:

my $verbose = 1;

该警告是因为$misc::verbose试图访问包变量 $verbosemisc包,顺便说一句,不宣。

my函数创建一个词法范围的变量。 在这种情况下,你需要范围的变量一个包,这是通过使用创建our功能。

请注意daxim的评论 。



文章来源: perl: inter-module variable use