当我通过一对子传递变量时,它总是变空。这是为什么?
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。
答案 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; }
我想你喜欢这个答案......