chomp
似乎能够更改未通过引用传递的变量的值;也就是说,语法是 chomp $var
而不是 chomp \$var
.
这怎么可能?如何在函数中模仿这种行为?chomp
:
my $var="foo\n";
chomp $var;
print $var
mychomp
:my $var="foo\n";
mychomp(\$var);
print $var;
sub mychomp {
my $ref=shift;
$$ref=~s/\s+$//;
}
最佳答案
所有 Perl 参数都是“通过引用传递”;更准确地说,@_
的内容是实际参数的别名
观察
use strict;
use warnings;
use 5.010;
my $s = 'abc';
upper_case($s);
say $s;
sub upper_case {
$_[0] =~ tr/a-z/A-Z/;
}
输出
ABC
请注意,使用数据文字调用此函数,例如
upper_case('def')
会产生 fatal error
Modification of a read-only value attempted
关于perl - chomp 是如何改变非引用传递的变量的值的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31492653/