在Perl中向多个函数传递哈希引用

在Perl中向多个函数传递哈希引用,perl,hash,hash-reference,Perl,Hash,Hash Reference,我有以下Perl代码,其中散列引用从主函数传递到func1,然后传递到func2。在func2中,哈希被更新。我想访问主函数中更新的哈希。在主函数中还有一个while循环,我希望哈希值应该在每次迭代中更新。代码看起来可能不符合逻辑,但我刚刚编写了代码的框架。当我试图在主函数中打印散列时,总是得到空散列 sub main { my %hash1; while (some condition) { my $i=0; if($i==0

我有以下Perl代码,其中散列引用从主函数传递到func1,然后传递到func2。在func2中,哈希被更新。我想访问主函数中更新的哈希。在主函数中还有一个while循环,我希望哈希值应该在每次迭代中更新。代码看起来可能不符合逻辑,但我刚刚编写了代码的框架。当我试图在主函数中打印散列时,总是得到空散列

sub main {
      my %hash1;
      while (some condition)
      {
        my $i=0;
        if($i==0)
        { 
          func1($i,\%hash1);                      
          $i=1;
        }
        else
        {  
          func1($i,\%hash1);                      
          $i=0;
        }
      }
      foreach my $a (keys %hash1)
      {
        print "$hash1{$a}";
      }       
}
sub func1
{    
my ($i,$hash1)=@_;
----
if($i==0)
{ 
   func2($hash1);       
}

}

sub func2
{
my ($hash2)=@_;
$hash2->{key1}=1;
$hash2->{key2}=2;
}
啊,我明白了。你认为由于散列是空的,所以它不会打印任何东西。但它真的没有打印任何东西,因为你没有给它任何运行的东西。你给它一些东西去编译,但是没有东西去运行

sub-main在Perl中没有任何含义。为了让它运行,你必须在主线上的某个地方;然后,如果您在第25行注释掉-,您将得到预期的输出

这就是为什么自己打印出来的东西要么打字多一点,要么不可靠。你什么也没看到,以为我们的杂烩是空的。事实上,代码甚至从未到达声明。因此,在命令行上有一个提示:

 cpan Smart::Comments
然后,在代码中:

use Smart::Comments;
...

### %hash1
这样,一个空散列如下所示:

### %hash1: {}
### %hash1: {
###           key1 => 1,
###           key2 => 2
###         }
你所期待的是这样的:

### %hash1: {}
### %hash1: {
###           key1 => 1,
###           key2 => 2
###         }
不调用main sub,您的输出如下所示:

### %hash1: {}
### %hash1: {
###           key1 => 1,
###           key2 => 2
###         }
是的,它是空白的


否则,传递散列也没什么问题

请检查您的代码,因为有一个结束}太多了,而且不清楚while循环从何处开始,在何处结束。谢谢Erik…我对缺少的}进行了更改,并为您在工作代码中给出的代码提供了条件。设置哈希值。请分享您遇到问题的实际代码。顺便说一句,在Perl中如何使用前导&调用sub-因此代码应该是&func1。。。但亚当是对的。您对问题的抽象无法用于检测问题并帮助您。代码在我看来不像有效的perl,也没有显示问题。提供我们可以复制和调试的工作代码,以便我们可以通过在机器上运行代码来解决您的问题