【问题标题】:Assign number to variable in perl subroutine [assign returned list to variables]在 perl 子例程中为变量分配编号 [将返回的列表分配给变量]
【发布时间】:2019-08-13 21:00:22
【问题描述】:

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

在 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。

【问题讨论】:

  • @Shawn 没有;在标量上下文中,没有列表。当 sub 调用具有标量上下文时,return ($f, $b) 中的逗号运算符处于标量上下文中,并且它丢弃其左操作数,使 sub 只返回 $b

标签: perl


【解决方案1】:

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

尝试以下方法:

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

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

【讨论】:

    【解决方案2】:

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

    把这些调用改成这个就可以了:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-06
        相关资源
        最近更新 更多