微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法确定哪些编译指示处于活动状态?

如何解决有没有办法确定哪些编译指示处于活动状态?

我想知道是否有办法确定特定范围内哪些编译指示处于活动状态。

perlvar 建议使用 %^H 但它在以下单行中似乎没有任何用处:

$ perl -e 'use strict; use warnings; use utf8; use Data::Printer; p %^H'
{}

我问,因为我花了很长时间才发现由 utf8 加载的隐式 MojolicIoUs::Lite pragma 造成了我的 Regexp::Grammars 测试未能捕获的麻烦,我希望有更好的方法解决此类问题。

解决方法

%^H 用于制作您自己的编译指示。 strictwarningsutf8$^H 中都设置了位。

但是对 $^H%^H 的更改会在执行的 BEGIN 块结束时恢复。因此您需要使用 caller 在运行时访问它们的值。

$ perl -e'
   use Data::Printer;

   sub f {
      CORE::say sprintf "%X",(caller(0))[8];
      p %{ (caller(0))[10] // {} };
   }

   {
      use strict;
      use warnings;
      use utf8;
      f();
   }

   {
      f();
   }
'
8007E2
{}
0
{}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。