当前位置:  开发笔记 > 编程语言 > 正文

为什么Perl中存在这么多"魔力"?

如何解决《为什么Perl中存在这么多"魔力"?》经验,为你挑选了4个好方法。

通过perlsub和perlop联机操作页面,我注意到那里有许多"魔法"和"魔法"的引用(只搜索其中任何一个"魔法").我想知道为什么Perl如此丰富.

一些例子:

print ++($foo = 'zz')            # prints 'aaa'       
printf "%d: %s", $! = 1, $!      # prints '1: Operation not permitted'
while (my $line = ) { ... }  # $line is tested for definedness, not truth
use warnings; print "0 but true" + 1  # "0 but true" is a valid number!

FMc.. 45

当Perl功能被描述为"魔术"时:

这意味着该功能由NBA球星魔术师约翰逊实施.每当Perl执行"魔法"时,它实际上是向一个植入Magic本身的远程接收器发送RPC调用.他计算答案,然后发送一条返回消息.将Johnson先生用于Perl的所有硬件部分提供了一个很好的抽象层,并简化了移植到新平台的过程.这比Apache Portable Runtime更容易.

资料来源:Perl Monks上的perrin

这是官方的!Perl更神奇.

点击以下Google搜索:

 25  site:ruby-doc.org     magic
 36  site:docs.python.org  magic
497  site:perldoc.perl.org magic

+1"魔术师"约翰逊 - 我最喜欢的解释. (3认同)


Eric Strom.. 25

用Perl的说法,Magic就是赋予应用于允许扩展其功能的变量/函数的属性的单词.其中一些功能可以直接从Perl获得,有些需要使用C api.

魔术的一个完美示例是tie允许您定义自己的变量实现的接口.可以对变量执行的每个操作(例如,获取或存储值)都会被公开以进行重新实现,从而允许优雅和逻辑的语法结构,例如存储在磁盘上的值的哈希,它们被透明地加载并保存在幕后.

Magic还可以引用某些内置函数可以表现的特殊方式,例如第一个参数如何map或者grep可以是块还是裸表达式:

my @squares = map {$_**2} 1 .. 10;
my @roots   = map sqrt, 1 .. 10;

这不是用户定义的子例程可用的行为.

Perl的许多其他功能(例如运算符重载或与数字或字符串运算符一起使用时可返回不同值的变量)都是使用魔术实现的.语境也可以被视为神奇.

简而言之,魔法就是Perl构造的行为与天真的解释所暗示的不同,这是规则的一个例外.魔术当然是非常强大的,不应该毫不在意地使用魔法.魔术师约翰逊当然参与了所有魔术的执行(参见FM的答案),但这超出了这个解释的范围.



1> FMc..:

当Perl功能被描述为"魔术"时:

这意味着该功能由NBA球星魔术师约翰逊实施.每当Perl执行"魔法"时,它实际上是向一个植入Magic本身的远程接收器发送RPC调用.他计算答案,然后发送一条返回消息.将Johnson先生用于Perl的所有硬件部分提供了一个很好的抽象层,并简化了移植到新平台的过程.这比Apache Portable Runtime更容易.

资料来源:Perl Monks上的perrin

这是官方的!Perl更神奇.

点击以下Google搜索:

 25  site:ruby-doc.org     magic
 36  site:docs.python.org  magic
497  site:perldoc.perl.org magic


+1"魔术师"约翰逊 - 我最喜欢的解释.

2> Eric Strom..:

用Perl的说法,Magic就是赋予应用于允许扩展其功能的变量/函数的属性的单词.其中一些功能可以直接从Perl获得,有些需要使用C api.

魔术的一个完美示例是tie允许您定义自己的变量实现的接口.可以对变量执行的每个操作(例如,获取或存储值)都会被公开以进行重新实现,从而允许优雅和逻辑的语法结构,例如存储在磁盘上的值的哈希,它们被透明地加载并保存在幕后.

Magic还可以引用某些内置函数可以表现的特殊方式,例如第一个参数如何map或者grep可以是块还是裸表达式:

my @squares = map {$_**2} 1 .. 10;
my @roots   = map sqrt, 1 .. 10;

这不是用户定义的子例程可用的行为.

Perl的许多其他功能(例如运算符重载或与数字或字符串运算符一起使用时可返回不同值的变量)都是使用魔术实现的.语境也可以被视为神奇.

简而言之,魔法就是Perl构造的行为与天真的解释所暗示的不同,这是规则的一个例外.魔术当然是非常强大的,不应该毫不在意地使用魔法.魔术师约翰逊当然参与了所有魔术的执行(参见FM的答案),但这超出了这个解释的范围.


"这不是用户定义的子程序可用的行为" - 不,这就是领先和原型的作用.
@ysth =>我指的是map和grep可以采用任何一种语法的方式(如图所示),而带有leading和prototype的sub需要一个块或显式代码引用,并且无法"捕获"它的第一个参数,如map/grep/split和许多其他内置函数.

3> Anon...:

我想知道为什么Perl如此丰富.

让事情变得简单.

你会发现Perl中最"神奇"的是简化常见任务的语法.


@LiraNuna:总之,'废话'.如果有的话,我会说Perl的魔力旨在让程序员高兴(用Ruby-creator和Perl粉丝Yukihiro Matsumoto的话来说).
让我重新说一下:Perl试图缩短语法,以使高尔夫球手的生活更轻松.
天哪,你们不能开个玩笑吗?:)
@LiraNuna一般来说,是的:我喜欢一个好笑话.在SO上,谈到Perl,可能不是.这里有太多繁琐的Perl-bashers.这些都不再有趣了.
有没有人知道任何专门为高尔夫球添加perl语法的情况?:)
@LiraNuna:不,Perl寻求简单易事.这并不意味着支持打高尔夫球.还要注意Anon.说魔法是*简化*语法,而不是*缩短*它.

4> Sinan Ünür..:

因为perl 总是 d OES W¯¯帽子 中号 EAN对于总有一些价值.


还有一些"意思"的价值!
ROFL ...最好用"我已经看过几年的某些价值观:)
推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有