首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Perl5.12中获得有效的Data::Alias?

如何在Perl5.12中获得有效的Data::Alias?
EN

Stack Overflow用户
提问于 2010-05-05 04:55:55
回答 3查看 644关注 0票数 5

我喜欢Data::Alias。它似乎在5.12中被打破了。它能被修复吗?很快就会修好吗?有没有更好的选择?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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中。期待它!:)

票数 11
EN

Stack Overflow用户

发布于 2010-05-05 05:03:42

该模块自2007年以来一直没有更新,但您可以随时向作者发送消息(Matthijs van Duin: xmath@cpan.org)或提交错误报告,就像Robert在他的回答中提到的那样。

以下是一些替代方案:

  • 至于在5.12+中工作的用于别名的其他CPAN模块:

代码语言:javascript
复制
- [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方法:

  • Perl内置了对符号表中存在的任何变量的别名的支持。这是按如下方式完成的:

my $x = 1;our $y;#在符号表中为当前包声明$y { local *y = \ $x;#将$y作为当前作用域中$x的别名$y++;}打印$x;#打印2

但是像往常一样,在使用动态作用域/ local之前,要知道它实际做了什么。

  • 词法标量可以在for循环的作用域中用作别名:

my $x = 1;for my $y ($x) { $y++;}打印$x;#打印2

这种类型的词法别名甚至可以在闭包中传递到循环之外,如果需要,您可以使用

  • 的别名魔术为子例程参数列表创建数组别名:

my $x = 1;my $alias = sub{\@_}->($x);#返回对其参数列表的引用,#保留其别名$$alias++;打印$x;#打印2

但这并没有给你提供比引用更多的功能,只是使用了不同的语法。

  • 和一个使用Perl的引用的例子:

my $x = 1;my $y = \ $x;#引用$x $$y++;#取消引用$y print $x;# prints 2

票数 5
EN

Stack Overflow用户

发布于 2010-08-15 16:48:41

我刚刚发现了另一个可能的选择:Scalar::Alias,它似乎可以在Perl5.12中工作。显然,它只是标量的别名,但它不需要用胖逗号代替等号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2768917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档