在perl

时间:2016-01-15 13:31:57

标签: perl perl-module

我有一个主要perl脚本(.pl)中存在的哈希我希望哈希对主要perl脚本中调用的模块(.pm)是可见的。我怎样才能全局申报?有可能吗?

3 个答案:

答案 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");