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+$//;
}
答案 0 :(得分:13)
所有Perl参数都是"通过引用传递&#34 ;;更准确地说,@_
的内容是实际参数的别名
观察
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')
会产生致命错误
Modification of a read-only value attempted