Perl子例程中的变量更改
我是Perl编程新手,尝试在Perl子例程中传递单个参数并在子例程中修改它。问题是,在子例程中,变量仍然保留其原始值。只有当它返回并退出子例程时,它才会反映其新的/更改的值Perl子例程中的变量更改,perl,Perl,我是Perl编程新手,尝试在Perl子例程中传递单个参数并在子例程中修改它。问题是,在子例程中,变量仍然保留其原始值。只有当它返回并退出子例程时,它才会反映其新的/更改的值 @arr1 = qw(166 2 3 4); $a, $b, $c, $d; ($a, $b, $c, $d) = @arr1; $mnop = &oneparam("$a"); print "mnop returned from oneparam is :", $mnop,
@arr1 = qw(166 2 3 4);
$a, $b, $c, $d;
($a, $b, $c, $d) = @arr1;
$mnop = &oneparam("$a");
print "mnop returned from oneparam is :", $mnop, "\n";
sub oneparam{
$qrst = shift;
print "param passed is ", $qrst, "\n";
$qsrt = 166 + 1;
print "qrst inside method ", $qrst, "\n";
return $qsrt;
}
print "qsrt outside method, ", $qsrt, "\n";
它给出了以下o/p:
param passed is 166
**qrst inside method 166**
mnop returned from oneparam is :167
qsrt outside method, 167
粗体的行(qrst…166)应该是167。有人能帮我理解为什么是166吗 您没有定义任何变量的范围。您应该使用
my
声明变量以限制其范围
始终使用严格使用;使用警告代码>。当您忘记声明变量时,它会给出一个错误
use strict;
use warnings;
sub oneparam {
my $qrst = shift;
$qsrt = $qrst + 1;
return $qsrt;
}
for my $n (qw(166 2 3 4)) {
my $mnop = oneparam($n);
print "oneparam($a) = $mnop\n";
}
虽然你的答案为找到问题指明了方向,但实际上并没有指出问题所在(打字错误$qrst
与$qsrt
)。@amon,我错过了问题的这一部分。然后再次,使用strict
会找到那个错误,所以我很好:)@amon非常感谢您指出类型