将多个数组,变量,哈希值发送到子例程的最佳方式是什么?
简单的形式,作品.
my $msg = &getMsg(1,2,3); print $msg; sub getMsg { my($a,$b,$c) = @_; }
我有这个版本的困难,我不知道如何将数据安全地发送到子程序,而不使用全局,这不是我想要做的.
my @array = ('a','b','c'); my $str = "Hello"; my %hash = ( 'a' => ['100','nuts'],'b' => ['200','bolts'],'c' => ['300','screws'],); my $msg = getMsg(@array,$str,%hash); print $msg; sub getMsg { my (@a,$s,%h) = @_; my $MSG; foreach my $x (@a) { $MSG .= "\n$str,$x your hash value = $h{$x}[0] $h{$x}[1]"; } return $MSG }
解决方法
您可以使用参考文献:
getMsg(\@array,\%hash,$scalar); sub getMsg { my ($aref,$href,$foo) = @_; for my $elem (@$aref) { ... } }
请注意,您尝试的作业:
my (@a,%h) = @_;
不起作用,因为@a是一个数组 – 将会打乱整个列表,使$s和%h未初始化.