![](/img/trans.png)
[英]How can you determine what Perl module is causing “undefined symbol: Perl_Tstack_sp_ptr?”
[英]perl how to determine the type of a “raw symbol”
顯然,可以在標量變量中存儲“原始符號”(而不是對符號的引用),並在標量上下文中使用它。
如何確定標量值表達式是否是這些符號之一?
它們似乎字符串化為"*name_of_symbol"
並且ref
返回""
。 但是, Data::Dumper
也能夠確定它不是字符串並且在沒有引用的情況下打印它。
是否可以確定何時有原始符號? Data::Dumper
是如何做到的?
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
local *foo = \4;
my $sym = *foo;
printf "((%s))\n", $sym;
printf "[[%s]]\n", (ref $sym);
print Dumper($sym);
生產:
((*main::foo))
[[]]
$VAR1 = *::foo;
我期待ref $sym
一些專用價值。
*foo
被稱為typeglob,簡稱為glob。 glob是C結構實例的反映,它包含每種類型值的槽 - “類型”的“glob”,可以說 - 並形成符號表的基礎。
它們很奇怪,因為它們都是一種變量( *foo
)和一種類型的值( $sym
值),盡管這與此無關。
要確定值是否為glob,可以使用以下命令:
use Scalar::Util qw( reftype );
( reftype(\$sym) // '' ) eq 'GLOB'
你也可以用
ref(\$sym) eq 'GLOB' # Fooled by bless(\$sym, 'GLOB')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.