是否可以在运行时内省标量的范围?

如果我有以下变量

my $a    = 0;
my $*b   = 1;
state $c = 2;
our $d   = 3;

我可以很容易地确定这$*b是动态的,但$a不是下面的代码

say $a.VAR.dynamic;
say $*b.VAR.dynamic;

有什么方法可以类似地确定它$c是状态变量$d还是包范围的变量?(我知道我可以用will每个变量声明的特征来做到这一点,但我希望有一种不需要注释每个声明的方法。也许有 ::(...) 插值?)

回答

在包范围变量的情况下,不要太难:

our $foo = 'bar';
say $foo.VAR.name ? OUR::.keys

我们在哪里使用OUR伪包。但是,没有STATE伪包这样的东西。它们显然出现在LEXICAL伪包中,但我找不到检查它们是否是状态变量的方法。对不起。


回答

据我所知,没有办法识别state变量。像任何词法一样,它存在于 lexpad 中。唯一不同的是,它有效地生成了第一次进入范围时进行初始化的代码。


以上是是否可以在运行时内省标量的范围?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>