我在perl文件中有一个哈希(让我们称之为test2.pl),如下所示:
our %hash1;
my %hash2 = {
one => ($hash1{"zero1"}, $hash1{"one1"} ),
two => ($hash1{"one1"}, $hash1{"two1"} ),
three => ($hash1{"two1"}, $hash1{"three1"}),
four => ($hash1{"three1"}, $hash1{"six1"} ),
five => ($hash1{"six1"}, $hash1{"one2"} ),
six => ($hash1{"one2"}, $hash1{"two2"} ),
last => ($hash1{"two2"}, $hash1{"last1"} ),
};
这会产生6 Use of uninitialized value in anonymous hash ({}) at test2.pl line 7.
个错误(文件中的第7行对应my %hash2
行,所有错误都表示第7行)。
我只能假设这是因为%hash1
在另一个调用此文件的文件(test1.pl)中定义。我认为使用our
足以定义它。我是否必须初始化哈希中的所有变量才能使其生效?
(我使用our
括号,因为我在那里声明了其他变量。)
答案 0 :(得分:6)
在Perl中,您将哈希定义为偶数列表。这意味着它们由 parens 而非大括号分隔:
my %hash = (
key1 => "value1",
key2 => "value2",
);
my $anonHashRef = {
key1 => "value1",
key2 => "value2",
};
Curly braces创建一个新的匿名哈希引用。
如果你不想从另一个文件访问哈希,你应该在顶部使用package
声明:
package FooBar;
# Your %hash comes here
# it HAS to be GLOBAL, i.e. declared with `our`, not `my`
然后我们可以require
或use
您的文件(尽管文件名和包名最好应该相同)并将您的哈希作为包全局访问:
在您的主文件中:
use 'file2.pl';
my $element = $FooBar::hash{$key};
请参阅Exporter
模块,了解如何在另一个命名空间中使用数据结构。