这是简化示例,并非实际情况。
目前我有一个实用程序模块(我们称之为 Z),它声明了许多函数并在变量中保存一些状态变量(我们称之为
Print
):
package Z;
use strict;
use warnings;
use feature qw(say);
our $Print;
sub test {
say @_ if $Print;
}
1;
这显然是为了通过
use
ing 模块打开/关闭某些内容的打印。
这是一个实用模块,因此它被许多模块
use
所使用。例如,X和Y分别表示不和做希望打印:
package X;
use strict;
use warnings;
use Z;
$Z::Print = 0; # Sets Z::Print to 0
sub f {
Z::test(@_);
}
1;
package Y;
use strict;
use warnings;
use Z;
$Z::Print = 1; # Sets Z::Print to 1
sub f {
Z::test(@_);
}
1;
显然,当 X 和 Y 都在同一脚本中时,这会导致问题,例如在这种情况下,Y 将通过全局更改
use
的值来“踩 X 的脚”:Z::Print
#!/usr/bin/env perl
# test.pl
use strict;
use warnings;
use X;
use Y;
my $v = 0;
X::f($v);
Y::f($v);