我有一个主要perl脚本(.pl)中存在的哈希我希望哈希对主要perl脚本中调用的模块(.pm)是可见的。我怎样才能全局申报?有可能吗?
答案 0 :(得分:4)
首先 - 这是一个坏主意。全局或超级全局,就像你正在寻找带有复杂依赖关系的代码一样 - 你首先使用模块试图避免。
但是 - 您可以使用our
声明变量,然后通过包名称访问它。
our %thing = ( key => "value" );
print Dumper \%main::thing;
这可以通过全名和模块在名称空间的其他位置看到。
(如果你真的必须,你可以开始使用TYPEGLOBs,但相信我,当我说这是一个坏主意)。
答案 1 :(得分:4)
这破坏了很多良好的软件设计规则,但是可以使用包变量。
在hash.pl中:
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use MyHashModule;
our %hash = (one => 1, two => 2, three => 3);
say hashkeys();
在MyHashModule.pm
中package MyHashModule;
use strict;
use warnings;
use base 'Exporter';
our @EXPORT = qw[hashkeys];
sub hashkeys {
return keys %main::hash;
}
1;
但我不能重复这是多么可怕的想法。如果您要解释更多关于您实际尝试的内容,我们可能会提出一个更加理智的解决方案。
答案 2 :(得分:0)
强烈建议您尽可能地声明局部变量而不是全局变量。如果您只需编写一个小脚本,声明全局变量可能没有问题,但随着脚本变大,或者您或其他开发人员添加了更多功能,可能会发现一些难以发现的逻辑错误英寸
话虽如此,如果你必须声明一个全局变量,你只需将my
更改为our
,如下所示:
our %global_variable = (key => "value");