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

前端之家收集整理的这篇文章主要介绍了在Perl中有更好的方法通过引用传递吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在做像这样的传递:
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);

这样做有更清洁的方法吗?

原型不起作用,因为我正在使用函数引用(相信我有一个使用函数引用的充分理由).

我也不想在repl中使用$_ [0]因为它很难看.

解决方法

你看过 Data::Alias吗?它允许您使用干净的语法创建词法范围的别名.

您可以使用它来创建像这样的传递引用语义:

use strict;
use warnings;

use Data::Alias;

sub foo {
    alias my ($arg) = @_;
    $arg++;
}

my $count = 0;

foo($count);

print "$count\n";

输出为1,表示对foo的调用修改了其参数.

原文链接:https://www.f2er.com/Perl/171774.html

猜你在找的Perl相关文章