我喜欢Data::Alias
。它似乎在5.12中被打破。可以修复吗?它会很快修好吗?有什么好的选择吗?
答案 0 :(得分:10)
在版本1.08(2010年10月22日发布,BST)之前构建的任何版本的Data::Alias
都不能与Perl 5.12一起使用,因为在{2.0}之前的Data::Alias
在Perl 5.12中被破坏了。升级到最新版本(1.08或更新版本)它应该可以工作!
作为一个有趣的旁注,似乎能够做别名可能会在未来使用Perl作为语言功能,并清除:=
no longer meaning an empty attribute list。对此期待! :)
答案 1 :(得分:4)
该模块自2007年以来尚未更新,但您可以随时向作者发送消息(Matthijs van Duin:xmath@cpan.org)或提交错误报告,如Robert在答案中所述。
以下是一些替代方案:
至于在5.12 +中使用的别名CPAN模块:
在CPAN上搜索'alias'会出现更多,但似乎没有人提供Data :: Alias的“在此语句中使用别名做一切”功能。因此,在修复Data::Alias
之前,您可以使用上述方法之一或以下纯Perl方法:
Perl内置支持将任何变量别名化到符号表中存在的变量。这样做如下:
my $x = 1;
our $y; # declare $y in the symbol table for the current package
{
local *y = \$x; # make $y an alias of $x in the current scope
$y++;
}
print $x; # prints 2
但与往常一样,在使用它之前要注意动态范围/本地实际执行的操作。
词法标量可以用作for循环范围内的别名:
my $x = 1;
for my $y ($x) {
$y++;
}
print $x; # prints 2
如果需要,这种类型的词法别名甚至可以在闭包中传递出来
您可以使用Perl的别名魔术为子程序参数列表创建数组别名:
my $x = 1;
my $alias = sub{\@_}->($x); # return a reference to its argument list,
# which maintains its aliases
$$alias[0]++;
print $x; # prints 2
但是这并没有给你提供任何比引用更多的功能,只是使用不同的语法。
使用Perl引用的示例:
my $x = 1;
my $y = \$x; # take a reference to $x
$$y++; # dereference $y
print $x; # prints 2
答案 2 :(得分:0)
我刚刚找到了另一个可能的选项:Scalar::Alias
,它似乎适用于Perl 5.12。显然,它只是对标量进行别名,但它不需要用逗号来代替等号。