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

前端之家收集整理的这篇文章主要介绍了在Perl中有更好的方法通过引用传递吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在做像这样的传递:
  1. use strict;
  2. use warnings;
  3.  
  4. sub repl {
  5. local *line = \$_[0]; our $line;
  6. $line = "new value";
  7. }
  8.  
  9. sub doRepl {
  10. my ($replFunc) = @_;
  11. my $foo = "old value";
  12. $replFunc->($foo);
  13. print $foo; # prints "new value";
  14. }
  15.  
  16. doRepl(\&repl);

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

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

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

解决方法

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

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

  1. use strict;
  2. use warnings;
  3.  
  4. use Data::Alias;
  5.  
  6. sub foo {
  7. alias my ($arg) = @_;
  8. $arg++;
  9. }
  10.  
  11. my $count = 0;
  12.  
  13. foo($count);
  14.  
  15. print "$count\n";

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

猜你在找的Perl相关文章