在Perl中向多个函数传递哈希引用
我有以下Perl代码,其中散列引用从主函数传递到func1,然后传递到func2。在func2中,哈希被更新。我想访问主函数中更新的哈希。在主函数中还有一个while循环,我希望哈希值应该在每次迭代中更新。代码看起来可能不符合逻辑,但我刚刚编写了代码的框架。当我试图在主函数中打印散列时,总是得到空散列在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
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,也没有显示问题。提供我们可以复制和调试的工作代码,以便我们可以通过在机器上运行代码来解决您的问题