在Perl中有更好的方法通过引用传递吗?

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它,因为它很难看.

Phi*_*ter 9

你看过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修改了它的参数.