【问题标题】:Passing hash reference to multiple functions in Perl将哈希引用传递给 Perl 中的多个函数
【发布时间】:2011-09-06 08:31:02
【问题描述】:

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

【问题讨论】:

  • 请检查您的代码,因为有一个关闭 } 太多,并且不清楚您的 while 循环从哪里开始以及在哪里结束。
  • 谢谢 Erik...我做出了改变
  • 纠正缺失的 } 并为您提供的代码提供条件,从而生成工作代码。哈希值已设置。请分享您遇到问题的实际代码。
  • 顺便说一句,恕我直言,在 Perl 中使用前导 & 调用 sub - 所以代码应该是 &func1(), ...但亚当是对的。您对问题的抽象对于发现问题和帮助您没有用处。
  • 代码对我来说看起来不像是有效的 perl,也没有显示问题。提供一个我们可以复制和调试的工作代码,以便我们可以通过在我们的机器上运行代码来解决您的问题

标签: perl hash hash-reference


【解决方案1】:

啊,我明白了。您认为由于哈希为空,它没有打印任何内容。但它真的没有打印任何东西,因为你没有给它任何东西运行。你给它提供了 compile 的东西,但没有提供 run 的东西。

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

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

 cpan Smart::Comments

然后,在您的代码中:

use Smart::Comments;
...

### %hash1

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

### %hash1: {}

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

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

没有调用main sub,你的输出看起来像这样:

(是的,它是空白的)

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

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    相关资源
    最近更新 更多