【发布时间】:2019-02-09 04:07:48
【问题描述】:
我正在尝试将散列和可选变量列表传递给散列中的子例程,但它不起作用。您能否更正以下示例代码以帮助我解决此问题?
我的示例代码如下所示
#!/bin/env perl
use warnings;
use strict;
use Data::Dumper;
my %h1 = ( a=> 2, b=>3);
sub sum {
my $var1=shift;
my $var2=shift;
my %hash1=@_;
#my($a,$b)=@_;
my $i=0;
foreach my $val (keys %hash1) {
$i=$i+$hash1{$val};
}
if ( not defined $var2 ) {
return ($i+$var1);
} else {
return ($i+$var1+$var2);
}
}
my $c=sum(3,%h1);
print $c;
【问题讨论】:
-
一般建议:始终
use strict;。不要调用你的变量$a或$b(它们在sort中有特殊含义)。不要用&调用子程序。 -
不是完全重复,而是相似:stackoverflow.com/questions/8481405/…
-
感谢 Melpomene。我已根据您的建议更新了代码。因为它只是一个示例代码,所以我不关心严格的功能。
-
因为它只是一个示例代码,所以我不关心严格的功能这绝不是一个好主意:-)
-
谢谢戴夫。我正在寻找一种使用 perl 子例程通过散列传递可选参数的方法。我让它工作了,这里是我的示例代码
标签: perl hash subroutine