亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

perl子程序返回多個數組到主程序中多個數組

perl子程序返回多個數組到主程序中多個數組

狐的傳說 2019-03-21 14:14:07
我想把三個數組c1,c2,c3分別返回到數組a1,a2,a3中,我在子程序中是這樣寫的,return @c1,@c2,@c3;調用時,(@a1,@a1,@a3)= &choose(@files)但是結果全部在@a1中求大神幫助
查看完整描述

3 回答

?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

sub choose(){
my (@c1, @c2, @c3);
@c1 = @_;
@c2 = sort @_;
@c3 = reverse @_;

return (\@c1,\@c2,\@c3);
}
my @arr = (1,2,3,5,4);
my (@a,@b,@c);
my @refs = &choose(@arr);
@a = @{$refs[0]};
@b = @{$refs[1]};
@c = @{$refs[2]};

print "@a\n@b\n@c\n";

說明:首先perl中只能對簡單的列表賦值給變量列表,而不能,列表賦值給列表組成的列表,比如@arr = (1,2,3);這個是可以的,($a,$b) = ($b, $a);這個也對, 但是(@arr1, @arr2) = (@arr2, @arr1); 這個就錯了,原因在于perl的列表是貪婪的, 也就是說 @arr1會盡可能的接受后面的數據,而(@arr2,@arr1)本身就是一個大的列表, 就全部被@arr1接受了,而@arr2為空,唯一的辦法就是用變量形式來接受具體數據。所以($ref_a1, $ref_a2) = (\@a1, \@a2);這種形式是可以的。
可能你要學習一下 perl中的引用了,類似于c語言中的指針和c++中的引用;接著上面的例子, 要用數組@a1, 只要寫成 @{ $ref_a1 } 就相當于@a1了,要取第一個元素,$a1[0] , ${ $ref_a1 } [0] ,只需要把前面的@改成$就可以了。


 


查看完整回答
反對 回復 2019-03-23
?
Helenr

TA貢獻1780條經驗 獲得超4個贊

對于你要返回列表型的值,需要使用引用,否則,會全部存入第一個接收數組中,應該這么寫
($a1, $a2,$a3) = choose(@files);
使用的時候,可以還原引用,如 @{$a1},或者直接讀下標,$a1->[n]

查看完整回答
反對 回復 2019-03-23
?
呼如林

TA貢獻1798條經驗 獲得超3個贊

返回數組引用, 然后使用數組引用.
return (\@c1,\@c2,\@c3);
($a1_ref, $a1_ref, $a3_ref)= choose(@files)

查看完整回答
反對 回復 2019-03-23
  • 3 回答
  • 0 關注
  • 1063 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號