【发布时间】:2013-05-22 22:15:11
【问题描述】:
我只是难以置信地看着这个序列:
my $line;
$rc = getline($line); # read next line and store in $line
我一直都明白 Perl 参数是按值传递的,所以每当我需要传递一个大型结构或传递一个要更新的变量时,我都会传递一个 ref。
然而,阅读 perldoc 中的细则,我了解到 @_ 是由参数列表中提到的变量的别名组成的。读取下一位数据后,getline()返回$_[0] = $data;,直接存储$data $line。
我喜欢这样 - 这就像在 C++ 中通过引用传递。但是,我还没有找到一种方法来为 $_[0] 分配一个更有意义的名称。有没有?
【问题讨论】:
-
是的,Perl 总是通过引用传递
-
好吧 - 不要与 Perl 引用混淆,Perl 引用更像 C 指针,因为它们必须被显式取消引用。
-
不会 $arg = shift; $arg = $数据;做吗?或者“shift”会复制参数吗?编辑:我测试了传递的标量和'shift'ed参数的地址,结果表明shift确实会复制,因此如上所述分配给$arg不会按预期影响$line。 :(
标签: perl parameters arguments pass-by-reference subroutine