在perl子例程中为变量分配编号[将返回的列表分配给变量]

时间:2019-08-13 21:00:22

标签: perl

我试图从子例程中调用一个多变量,但是当我尝试打印时,它仅打印一个变量。

在python中,脚本将为f = mode()[0]和b = mode()[1],并且可以正常工作。

子例程文件a.pl

sub mode() {
    my ($f, $b);
    $f=41;
    $b=2;
    return ($f,$b);
 }

另一个调用a.pl的文件

use strict;
use warnings;
require 'a.pl';
my ($f,$b);
$f= mode(0);
$b= mode(1);
print "$f\n";
print "$b\n";

问题在于它只为f和b都打印2。

3 个答案:

答案 0 :(得分:2)

您已将参数传递给子例程:$f = mode(0); $b = mode(1);

尝试以下操作:

my ($f,$b) = mode();

您的子例程返回固定长度的列表。您可以将列表中的值分配给变量。

答案 1 :(得分:1)

问题在于子例程的定义(无参数)与您试图调用它的方式(一个参数)之间不匹配。

将这些调用更改为此即可,

$f= (mode())[0];
$b= (mode())[1];

答案 2 :(得分:0)

认为从返回集获取数组索引与发送参数之间在语法上存在差异。 function(xxx)发送参数,(function()[])使用返回的数组切片。