chomp如何能够改变未通过引用传递的变量的值?

时间:2015-07-18 15:25:47

标签: perl

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+$//;
}

1 个答案:

答案 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