我喜欢Data::Alias。它似乎在5.12中被打破了。它能被修复吗?很快就会修好吗?有没有更好的选择?
发布于 2010-05-05 05:01:27
在1.08版本(2010年10月22日发布)之前构建的任何版本的Data::Alias都不能与Perl5.12一起工作,因为1.08之前的Data::Alias在Perl5.12中被破坏了。升级到最新版本(1.08或更新版本),它应该可以工作!
有趣的是,随着:= no longer meaning an empty attribute list的清理,似乎能够做别名的功能将来可能会作为一种语言特性出现在Perl中。期待它!:)
发布于 2010-05-05 05:03:42
该模块自2007年以来一直没有更新,但您可以随时向作者发送消息(Matthijs van Duin: xmath@cpan.org)或提交错误报告,就像Robert在他的回答中提到的那样。
以下是一些替代方案:
- [Variable::Alias](http://search.cpan.org/perldoc?Variable::Alias) - clean syntax
- [Tie::Alias](http://search.cpan.org/perldoc?Tie::Alias) - a pure perl solution
- [Lexical::Alias](http://search.cpan.org/perldoc?Lexical::Alias) - clean syntax
- [Devel::LexAlias](http://search.cpan.org/perldoc?Devel::LexAlias) - a bit lower level 在CPAN上搜索'alias‘的次数更多,但似乎都没有提供Data::Alias的“在这个语句中使用别名做所有事情”的特性。因此,在Data::Alias修复之前,您可以使用上述方法之一,或者使用以下纯Perl方法:
my $x = 1;our $y;#在符号表中为当前包声明$y { local *y = \ $x;#将$y作为当前作用域中$x的别名$y++;}打印$x;#打印2
但是像往常一样,在使用动态作用域/ local之前,要知道它实际做了什么。
my $x = 1;for my $y ($x) { $y++;}打印$x;#打印2
这种类型的词法别名甚至可以在闭包中传递到循环之外,如果需要,您可以使用
my $x = 1;my $alias = sub{\@_}->($x);#返回对其参数列表的引用,#保留其别名$$alias++;打印$x;#打印2
但这并没有给你提供比引用更多的功能,只是使用了不同的语法。
my $x = 1;my $y = \ $x;#引用$x $$y++;#取消引用$y print $x;# prints 2
发布于 2010-08-15 16:48:41
我刚刚发现了另一个可能的选择:Scalar::Alias,它似乎可以在Perl5.12中工作。显然,它只是标量的别名,但它不需要用胖逗号代替等号。
https://stackoverflow.com/questions/2768917
复制相似问题