Perl:sub无法成功地拥有我的输入[重复]

azpvetkf  于 2022-11-15  发布在  Perl
关注(0)|答案(1)|浏览(155)

此问题在此处已有答案

How do pass one array and one string as arguments to a function?(5个答案)
5个月前关闭。
我有以下命令,我把变量“$bus”和“$value”放在子busbitFill中。
而且潜艇可以成功地吃掉$bus,但是$value不起作用。请告诉我我错在哪里...。

....some code that generate $index, $bus and $value...

 print "index=$index\n bus=$bus\n value=$value\n";    #<=all variable printed successfully

 &busbitFill($bus, @array0, $value);                  
                                                         

sub busbitFill {
    my($bus, @array, $val) = @_;
    print "val1: $val\n";                    #<=but when $value goes into sub "busbitFill"
}                                            #  the sub cannot print $val 


<This is the printed result for first row in above code>
index=AA[0]
 
bus=[2:0]

value=110
zf9nrax1

zf9nrax11#

你不能把数组传递给subs,只能传递标量。

$bus, @array0, $value

与相同

$bus, $array0[0], $array0[1], ..., , $array0[$#array], $value

现在,你知道@_中有多少个元素,你把它们赋给$bus, @array, $val。第一个被赋给$buf。但是剩下的参数中有多少应该赋给@array?Perl没有办法知道。所以它把剩下的所有参数赋给@array
请改为传递数组的指涉。

sub busbitFill {
   my ( $bus, $array, $value ) = @_;
   ...
}

busbitFill( $bus, \@array0, $value );

不要忘记,$array现在是对数组的引用,而不是数组,sub的代码必须考虑到这一点。

相关问题