perl - chomp 是如何改变非引用传递的变量的值的?

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

最佳答案

所有 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/

相关文章:

windows - 在 Perl 中将 .exe 转换为 .pl?

regex - 在 perl 正则表达式中获取并运行 shell 函数

perl - 使用 Perl 将数字十六进制格式的 UCS2(未知 LE 或 BE)转换为 UTF-8

perl - 将 2 行合并为 1

Perl soap::lite 和复杂数据

Perl 在警告时正则表达式编译中使用未初始化的值

linux - 在 Perl 脚本中执行 SQLite DB 时遇到问题

performance - 删除元素时,Perl中的哈希值会收缩吗?

perl - 读取 Perl 中的可选命令行参数

perl - 驼鹿:属性值更改时过期的缓存计算结果到期吗?