Joe*_*Fan 6 parameters perl perl-module parameter-passing pass-by-reference
我正在做像这样的传递:
use strict;
use warnings;
sub repl {
local *line = \$_[0]; our $line;
$line = "new value";
}
sub doRepl {
my ($replFunc) = @_;
my $foo = "old value";
$replFunc->($foo);
print $foo; # prints "new value";
}
doRepl(\&repl);
Run Code Online (Sandbox Code Playgroud)
这样做有更清洁的方法吗?
原型不起作用,因为我正在使用函数引用(相信我有一个使用函数引用的充分理由).
我也不想在$_[0]
任何地方使用repl
它,因为它很难看.
你看过Data :: Alias了吗?它允许您使用干净的语法创建词法范围的别名.
您可以使用它来创建像这样的传递引用语义:
use strict;
use warnings;
use Data::Alias;
sub foo {
alias my ($arg) = @_;
$arg++;
}
my $count = 0;
foo($count);
print "$count\n";
Run Code Online (Sandbox Code Playgroud)
输出是1
,表示调用foo
修改了它的参数.