在Perl中,return语句可以返回一个标量值或者一个列表,这个标量值可以是一个变量,或者一个表达式的最后求值,如:
perl
return1; return(1);
return$a+$b; return($a+$b);然后,一个Perl函数的返回值,并不止一个,有的时候会有多个值需要返回,这是就要用到列表,这个列表可以包含多个变量值。
一、单一变量的Perl函数返回值
perl
#Functiondefinition.
sub get_value()
{
my$var;
$var=1;
return($var);
}
#Mainscript
my$result;
$result=get_value();
print"\$result=$result\n";
#printresultis
$result=1;二、多个标量的Perl函数返回值
perl
#Functiondefinition.
sub get_value()
{
my($var_a,$var_b);
$var_a=1;
$var_b=2;
return($var_a,$var_b);
}
#Mainscript
my($result_a,$result_b);
($result_a,$result_b)=get_value();
print"\$result_a=$result_a\n\$result_b=$result_b\n";
#printresultis:
$result_a=1;
$result_b=2;三、数组的Perl函数返回值
perl
#Functiondefinition.
sub get_value()
{
my(@var_a, @var_b);
@var_a=(1,2);
@var_b=(30,40);
return(@var_a,@var_b);
}
#Mainscript
my(@result_a,@result_b);
(@result_a,@result_b)=get_value();
print"\@result_a=@result_a\n\@result_b=@result_b\n";
#printresultis:
@result_a=(1,2,30,40);
@result_b=();在这里,我们原本希望得到的结果应该是:
@result_a=1,2
@result_b=30,40
但实际上却并不是这样,这里一点需要注意的是:Perl中返回值中的列表是被“铺平(flattened)的”,也就是说:
return(@var_a,@var_b); return(var_a[1],var_b[1]);
所以这个时候,return将会把returnlist里面的值,和接受returnlist里面的变量一一对应起来,当遇到数组是表示接受所有值。所以,解决这个问题就需要使用引用,如:
perl
#Functiondefinition.
sub get_value()
{
my(@var_a, @var_b);
@var_a=(1,2);
@var_b=(30,40);
return(\@var_a,\@var_b);
}
#Mainscript
my(@result_a,@result_b);
my($result_a_ref,$result_b_ref);
($result_a_ref,$result_b_ref)=get_value();
#hereneedtoencodethereference
@result_a=@$result_a_ref;
@result_b=@$result_b_ref;
print"\@result_a=@result_a\n\@result_b=@result_b\n";
#printresultis:
@result_a=1,2
@result_b=30,40所以对于哈希变量的返回也可以做同样的处理,当有标量,数组,哈希变量一起混合使用的时候也应该做同样的处理。
评论
0评论加载中…