Rya*_*son 5 perl incompatibility perl5.12
我很喜欢Data::Alias.它似乎在5.12中被打破.可以修复吗?它会很快修好吗?还有什么好的选择吗?
Rob*_*t P 11
Data::Alias在版本1.08(2010年10月22日发布,BST)之前构建的任何版本都不能与Perl 5.12一起使用,因为Data::Alias在Perl 5.12中打破了1.08之前的版本.升级到最新版本(1.08或更新版本),它应该工作!
作为一个有趣的旁注,看起来能够做别名可能会在未来将Perl作为一种语言功能,清理:= 不再是一个空的属性列表.对此期待!:)
自2007年以来,该模块尚未进行过更新,但是您始终可以向作者发送消息(Matthijs van Duin:xmath@cpan.org),也可以提交错误报告,如Robert在他的回答中提到的那样。
以下是一些替代方案:
至于在5.12+中有效的用于别名的其他CPAN模块:
在CPAN上搜索“别名”会发现更多信息,但是似乎没有人提供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
Run Code Online (Sandbox Code Playgroud)
但是,与往常一样,在使用动态范围/局部变量之前,请先对其进行实际操作。
词汇标量可以在for循环范围内用作别名:
my $x = 1;
for my $y ($x) {
$y++;
}
print $x; # prints 2
Run Code Online (Sandbox Code Playgroud)
如果需要,这种词法别名甚至可以在闭包中传递出循环
您可以使用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
Run Code Online (Sandbox Code Playgroud)
但这实际上并没有为您提供比引用更多的功能,只是使用了不同的语法。
还有一个使用Perl引用的示例:
my $x = 1;
my $y = \$x; # take a reference to $x
$$y++; # dereference $y
print $x; # prints 2
Run Code Online (Sandbox Code Playgroud)