需要帮助才能弄清楚如何做到这一点。我的代码:
my %hash;
$hash{'1'}= {'Make' => 'Toyota','Color' => 'Red',};
$hash{'2'}= {'Make' => 'Ford','Color' => 'Blue',};
$hash{'3'}= {'Make' => 'Honda','Color' => 'Yellow',};
&printInfo(%hash);
sub printInfo{
my (%hash) = %_;
foreach my $key (keys %_{
my $a = $_{$key}{'Make'};
my $b = $_{$key}{'Color'};
print "$a $b\n";
}
}
发布于 2011-02-04 08:00:11
简单的方法是将默认数组@_ (它包含所有键值对作为偶数组)分配给%hash,然后%hash相应地重新构建。因此,您的代码将如下所示:
sub printInfo {
my %hash = @_;
...
}
更好的方法是将散列作为引用传递给子例程。通过这种方式,您仍然可以将更多参数传递给子例程。
printInfo(\%hash);
sub PrintInfo {
my %hash = %{$_[0]};
...
}
有关在Perl中使用引用的介绍,可以在perlreftut中找到
发布于 2011-02-04 07:54:39
你已经非常非常接近了。没有用于传递哈希的%_
,它必须在@_
中传递。幸运的是,散列是使用列表上下文分配的,因此
sub printInfo {
my %hash = @_;
...
}
会让它工作起来!
还要注意,在大多数情况下,至少从Perl 5.000开始,在子例程调用之前使用&
是不必要的。您现在可以像在其他语言中一样调用Perl子例程,只需名称和参数即可。(正如@mob在评论中指出的那样,在某些情况下,这仍然是必要的;如果感兴趣,请参阅perlsub以了解更多。)
发布于 2011-02-04 07:54:40
我相信你想
my %hash;
$hash{'1'}= {'Make' => 'Toyota','Color' => 'Red',};
$hash{'2'}= {'Make' => 'Ford','Color' => 'Blue',};
$hash{'3'}= {'Make' => 'Honda','Color' => 'Yellow',};
printInfo(%hash);
sub printInfo{
my %hash = @_;
foreach my $key (keys %hash){
my $a = $hash{$key}{'Make'};
my $b = $hash{$key}{'Color'};
print "$a $b\n";
}
}
在printInfo(%hash)
行中,%hash
扩展为包含交替键值对的列表。
在printInfo
中,@_
是这个列表,并被分配给%hash
,它再次从列表中的交替元素中创建关键字及其相应值。
https://stackoverflow.com/questions/4893113
复制相似问题