我正在做像这样的传递:
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";