如何解决有没有办法确定哪些编译指示处于活动状态?
我想知道是否有办法确定特定范围内哪些编译指示处于活动状态。
perlvar
建议使用 %^H
但它在以下单行中似乎没有任何用处:
$ perl -e 'use strict; use warnings; use utf8; use Data::Printer; p %^H'
{}
我问,因为我花了很长时间才发现由 utf8
加载的隐式 MojolicIoUs::Lite
pragma 造成了我的 Regexp::Grammars
测试未能捕获的麻烦,我希望有更好的方法来解决此类问题。
解决方法
%^H
用于制作您自己的编译指示。 strict
、warnings
和 utf8
在 $^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 举报,一经查实,本站将立刻删除。