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