-4

我在 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;
}
4

1 回答 1

1

啊,我明白了。您认为由于哈希为空,它没有打印任何内容。但它真的没有打印任何东西,因为你没有给它任何东西来运行。你给它编译的东西,但没有东西可以运行

sub main在 Perl 中没有任何意义。为了让它运行,你必须在你的主线上放置一个地方main();然后如果你注释掉---第 25 行,你会得到你期望的输出。

这就是为什么自己打印东西要么 1) 打字多一点,要么 2) 不可靠。你什么也没看到,还以为我们的哈希是空的。当真的,代码甚至没有到达声明。所以,这里有一个提示,在命令行:

 cpan Smart::Comments

然后,在您的代码中:

use Smart::Comments;
...

### %hash1

这样一个空的哈希看起来像这样:

### %hash1: {}

你所期望的,看起来像这样:

### %hash1: {
###           key1 => 1,
###           key2 => 2
###         }

如果不调用sub,您的main输出将如下所示:

(是的,它是空白的)

否则,您传递哈希没有任何问题。

于 2011-06-02T12:41:12.940 回答