perl子程序返回多个数组到主程序中多个数组
我想把三个数组c1,c2,c3分别返回到数组a1,a2,a3中,我在子程序中是这样写的,return@c1,@c2,@c3;调用时,(@a1,@a1,@a3)=&choo...
我想把三个数组c1,c2,c3分别返回到数组a1,a2,a3中,
我在子程序中是这样写的,return @c1,@c2,@c3;
调用时,(@a1,@a1,@a3)= &choose(@files)
但是结果全部在@a1中
求大神帮助 展开
我在子程序中是这样写的,return @c1,@c2,@c3;
调用时,(@a1,@a1,@a3)= &choose(@files)
但是结果全部在@a1中
求大神帮助 展开
展开全部
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] ,只需要把前面的@改成$就可以了。
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] ,只需要把前面的@改成$就可以了。
展开全部
对于你要返回列表型的值,需要使用引用,否则,会全部存入第一个接收数组中,应该这么写
($a1, $a2,$a3) = choose(@files);
使用的时候,可以还原引用,如 @{$a1},或者直接读下标,$a1->[n]
($a1, $a2,$a3) = choose(@files);
使用的时候,可以还原引用,如 @{$a1},或者直接读下标,$a1->[n]
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
返回数组引用, 然后使用数组引用.
return (\@c1,\@c2,\@c3);
($a1_ref, $a1_ref, $a3_ref)= choose(@files)
return (\@c1,\@c2,\@c3);
($a1_ref, $a1_ref, $a3_ref)= choose(@files)
追问
我后面怎么使用数组@a1啊?
直接使用吗?
追答
引用不会用么?
$a1_ref->[0] 第一个元素
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询