首页 > 解决方案 > 有没有办法确定哪些 pragma 是活动的?

问题描述

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

perlvar建议%^H但它似乎在以下单行中没有做任何有用的事情:

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

我问是因为我花了很长时间才弄清楚utf8加载的隐式编译指示Mojolicious::Lite会造成我的Regexp::Grammars测试未能捕获的问题,我希望有更好的方法来解决这些问题。

标签: perlpragma

解决方案


%^H用于制作自己的语用语。strictwarnings以及utf8中的所有设置位$^H

但是在执行的 BEGIN 块的末尾恢复对两者$^H的更改。%^H所以你需要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
{}

推荐阅读