首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将散列传递给子例程?

如何将散列传递给子例程?
EN

Stack Overflow用户
提问于 2011-02-04 07:51:29
回答 3查看 45.1K关注 0票数 23

需要帮助才能弄清楚如何做到这一点。我的代码:

代码语言:javascript
复制
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";
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-04 08:00:11

简单的方法是将默认数组@_ (它包含所有键值对作为偶数组)分配给%hash,然后%hash相应地重新构建。因此,您的代码将如下所示:

代码语言:javascript
复制
sub printInfo {
   my %hash = @_;
   ...
}

更好的方法是将散列作为引用传递给子例程。通过这种方式,您仍然可以将更多参数传递给子例程。

代码语言:javascript
复制
printInfo(\%hash);
sub PrintInfo {
   my %hash = %{$_[0]};
   ...
}

有关在Perl中使用引用的介绍,可以在perlreftut中找到

票数 40
EN

Stack Overflow用户

发布于 2011-02-04 07:54:39

你已经非常非常接近了。没有用于传递哈希的%_,它必须在@_中传递。幸运的是,散列是使用列表上下文分配的,因此

代码语言:javascript
复制
sub printInfo {
   my %hash = @_;
   ...
}

会让它工作起来!

还要注意,在大多数情况下,至少从Perl 5.000开始,在子例程调用之前使用&是不必要的。您现在可以像在其他语言中一样调用Perl子例程,只需名称和参数即可。(正如@mob在评论中指出的那样,在某些情况下,这仍然是必要的;如果感兴趣,请参阅perlsub以了解更多。)

票数 8
EN

Stack Overflow用户

发布于 2011-02-04 07:54:40

我相信你想

代码语言:javascript
复制
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,它再次从列表中的交替元素中创建关键字及其相应值。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4893113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档