簡體   English   中英

perl如何確定“原始符號”的類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM