如何区分符号表和常规哈希变量?

mob*_*mob 11 perl glob

有没有办法判断哈希引用是否指的是符号表?

也就是说,该功能怎么可能

sub foo {
    my ($hashref) = @_;
    ...
}
Run Code Online (Sandbox Code Playgroud)

知道它是否被调用为

foo( \%main:: )
Run Code Online (Sandbox Code Playgroud)

而不是

foo( \%main )
Run Code Online (Sandbox Code Playgroud)

应用程序是一个有时tie是哈希变量的函数,但我想避免尝试绑定一个符号表.

Eri*_*rom 7

看起来这可以通过C API来完成HvNAME.以下是来自perlapi:

HvNAME

返回存储的包名称,如果存储不是存储,则返回NULL.见SvSTASH,CvSTASH.

  1. char*HvNAME(HV*藏匿处)

  • 我刚开始从运行`perl -MDevel :: Peek -e'转储(\%a::),转储(\%a)'`推断出这一点.谢谢你的链接,所以我可以做更少的货物结果.如果没有XS,您仍然可以执行类似`$ is_a_symtable = do {$ sv = B :: svref_2object($ hashref); ref($ sv)eq'B :: HV'&& $ sv-> NAME};` (2认同)