在将某些键添加到哈希中(即修改子例程)时遇到一些麻烦。这里是我的子程序调用:在子例程中修改哈希的Perl - 全局符号需要明确的包名称
getMissingItems($filename, \%myItems); #myItems is already defined above this
和子程序本身:
sub getMissingItems {
my $filename = shift;
my $itemHash = shift;
#... some stuff
foreach $item (@someItems) {
if (not exists $itemHash{$item}) {
%$itemHash{$item} = 0;
}
}
}
我得到的错误“环球象征%itemHash需要明确的包名”
我应该如何正确地做这个?谢谢。
编辑 - 谢谢大家,在第一个障碍。我现在变得“不能使用字符串(”0“)作为HASH ref,而使用”strict refs“。”我只想将丢失的键条目设置为零
新的错误只会发生在您提供的代码中,如果您在“...”的某个地方将$ itemhash迂回。请提供一个最小的,可运行的问题演示。如果你开始一个新的问题没关系,因为它与你已经问过的问题无关。 – ikegami
其实我在发布内部循环之前没有使用$ itemHash。而且,曲线? – JDS
我能够使用“undef”,它似乎在做这项工作,因为其他地方的脚本undef被转换为0.但我会好奇为什么这不起作用,我认为我可以尊重和修改散列(添加键等)。 – JDS