我只是难以置信地看着这个序列:
my $line;
$rc = getline($line); # read next line and store in $line
我一直都知道Perl参数是通过值传递的,所以每当我需要传入一个大型结构,或传入一个变量进行更新时,我都会传递一个参考。
在perldoc中读取精细打印,然而,我已经了解到@_由别名组成了参数列表中提到的变量。在阅读下一位数据后, getline()会返回 $ _ [0] = $ data; ,直接存储 $ data 进入 $ line 。
我喜欢这个 - 就像在C ++中通过引用传递一样。但是,我还没有找到一种方法为 $ _ [0] 指定一个更有意义的名称。有没有?
答案 0 :(得分:7)
你可以,它不是很漂亮:
use strict;
use warnings;
sub inc {
# manipulate the local symbol table
# to refer to the alias by $name
our $name; local *name = \$_[0];
# $name is an alias to first argument
$name++;
}
my $x = 1;
inc($x);
print $x; # 2
答案 1 :(得分:0)
最简单的方法可能只是使用循环,因为循环将其参数别名为名称;即。
sub my_sub {
for my $arg ( $_[0] ) {
code here sees $arg as an alias for $_[0]
}
}
答案 2 :(得分:0)
@ Steve的代码版本,允许多个不同的参数:
sub my_sub {
SUB:
for my $thisarg ( $_[0] ) {
for my $thatarg ($_[1]) {
code here sees $thisarg and $thatarg as aliases
last SUB;
}
}
}
当然这会带来多级嵌套及其自身的代码可读性问题,因此只有在绝对必要时才使用它。