通过函数传递变量

时间:2012-10-19 07:44:17

标签: perl

当我通过一对子传递变量时,它总是变空。这是为什么?

sub Main {

    my $myVariable = "Test string";
    firstSub($myVariable);
}


sub firstSub {

    my($myVariable) = @_;
    my @array = `some command`;
    secondSub(@array, $myVariable);
}

sub secondSub {

    my(@array, $myVariable) = @_;
    print $myVariable; 
}

echo将是undef。

4 个答案:

答案 0 :(得分:4)

echo不是有效的Perl函数。你在这里用Perl混淆shell。试试“print”或“say”(后者使用Perl 5.10及更新版本)。

你也不能指定一个数组&另一个数组的标量变量&标量变量。这意味着这不起作用,因为右侧的所有元素都将分配给左侧的数组,并且不会将任何内容分配给标量:my (@array, $myVariable) = @_;要么交换元素的顺序my ($myVariable, @array) = @_;(同样在调用函数时)或使用数组引用而不是完整数组。

答案 1 :(得分:2)

您的代码没有做任何事情,因为您已经定义了三个子例程,但您从未调用它们。

只需添加Main();即可实际运行您的主要子。

此外,您需要print而不是回声。

另外,Moritz Bunkus解释说,变量的传递是不正确的。

答案 2 :(得分:1)

当您调用secondsub()时,@ array和$ myVariable将作为列表(单个元素)发送,并在secondsub函数中分配给@array。在secondsub中打印@array时,您可以看到@array和$ myVariable值。

您必须将数组作为引用传递,并在secondsub中将其作为标量值接收。以下代码可以使用。

&Main();
sub Main {

    my $myVariable = "Test string";
    firstSub($myVariable);
}


sub firstSub {

    my($myVariable) = @_;
    my @array = `some command`;
    secondSub(\@array,$myVariable);


}

sub secondSub {

    my($ref,$myVariable) = @_;
   print $myVariable;
}

答案 3 :(得分:-1)

<传递变量:

  my $txt = "this text for sample";

Function_Passing_varible($txt);

sub Function_Passing_varible{
                my $text = shift;
                print $text;

}

我想你喜欢这个答案......