0

当我通过几个潜艇传递一个变量时,它总是变成空的。为什么是这样 ?

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

4 回答 4

4

echo不是有效的 Perl 函数。您在这里将 shell 与 Perl 混淆了。尝试“ print”或“ say”(后者在 Perl 5.10 和更新版本中使用)。

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

于 2012-10-19T07:46:37.373 回答
2

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

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

此外,您需要print代替回声。

此外,正如 Moritz Bunkus 解释的那样,变量的传递是不正确的。

于 2012-10-19T07:49:04.283 回答
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;
}
于 2012-10-19T10:39:36.827 回答
-1

传递变量:

  my $txt = "this text for sample";

Function_Passing_varible($txt);

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

}

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

于 2012-10-19T12:00:49.950 回答