gpt4 book ai didi

perl - Perl 的词法范围的编译指示是如何实现的?

转载 作者:行者123 更新时间:2023-12-04 05:07:57 25 4
gpt4 key购买 nike

编译指示,如 autodie ,根据文档,是词法范围的。

{
use autodie;
..
..
}
# Can die here

这是否适用于所有加载有 use 的模块? ?
据我所知, use几乎与以下内容相同:
BEGIN {
require autodie;
autodie->import(LIST);
}
BEGIN发生在编译时,并且 require 没有词法范围。那么 autodie怎么样知道它的范围吗?

最佳答案

简短的回答是词法范围 pragmatic modules被明确写成这样,并使用神奇的内部变量 $^H %^H 在编译期间启用和禁用功能。

编译器通过隐式本地化这些变量来发挥作用,以便在编译代码块结束时将它们的值恢复为开始时的值。通过这种方式,它提供了词汇语义的基础。

原来只有$^H变量可用。它包含一个位掩码,指示在编译期间随时可用的编译器选项。因此,唯一可以编写的词法编译指示是操纵 $^H 中定义的魔法位集的编译指示。 .

后来%^H hash 被引入,现在任何 pragma 都可以使用以 pragma 名称开头的键将值存储在此散列中。因为编译器以与标量相同的方式本地化散列,所以任何 pragma 都可以在此处存储自动范围内的状态信息。
autodie模块不操作这些变量中的任何一个,而是将 Fatal 子类化。完成所有艰苦工作的模块。它使用 %^H跟踪哪些运算符已成为致命的,并依赖编译器在 block 的末尾丢弃此信息。

关于perl - Perl 的词法范围的编译指示是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11711804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com