相关疑难解决方法(0)

哪个Perl内置函数不能在CORE :: GLOBAL中重写?

重写内置函数的perlsub文档的部分提供

当您希望在任何地方覆盖内置函数时,有时会使用第二种方法,而不考虑名称空间边界.这是通过将sub导入特殊命名空间来实现的CORE::GLOBAL::.

然后举几个例子.然而,最后是

最后,一些内置插件(例如 exists或者grep)不能被覆盖.

什么是完整清单?

perl

13
推荐指数
2
解决办法
1181
查看次数

如何使用模拟的"readline"函数自动分配到"$ _"?

Perl对readline函数(以及等效的<>I/O运算符)进行了一些特殊处理,它处理表达式

while (<HANDLE>)
while (readline(HANDLE))
Run Code Online (Sandbox Code Playgroud)

相当于

while (defined($_ = <HANDLE>))
Run Code Online (Sandbox Code Playgroud)

比照

$ perl -MO=Deparse -e 'f($_) while <>'
f($_) while defined($_ = <ARGV>);      <--- implicitly sets $_
-e syntax OK
Run Code Online (Sandbox Code Playgroud)

但是如果你劫持这个readline功能,这种自动分配似乎不会发生:

$ perl -MO=Deparse -e 'BEGIN {
> *CORE::GLOBAL::readline = sub { }
> }
> f($_) while <>'
sub BEGIN {
    *CORE::GLOBAL::readline = sub {
    };
}
f($_) while readline(ARGV);            <--- doesn't set $_ !
-e syntax OK
Run Code Online (Sandbox Code Playgroud)

当然,这会使自定义readline函数对许多遗留代码的工作不正确.这段代码的输出是"foo"BEGIN块, …

perl

11
推荐指数
1
解决办法
369
查看次数

标签 统计

perl ×2