簡體   English   中英

為什么ref不返回'GLOB'?

[英]Why ref does not return 'GLOB'?

我想更好地理解typeglobs並編寫小程序:

use Symbol;

open F, '>', \my $var;
t( F );
t( \F );
t( *F );
t( \*F );
sub t {
   my $fh =  shift;
   print ">>$fh<<" . ref( $fh ) ."\n";
}

輸出是:

>>F<<
>>SCALAR(0x1e67fc8)<<SCALAR
>>*main::F<<
>>GLOB(0x1e53150)<<GLOB

為什么GLOB僅在最后一種情況下被返回?

  • t( F ) :字符串[1]不是對glob的引用。
  • t( \\F ) :對字符串的引用不是對glob的引用。
  • t( *F ) :glob不是對glob的引用。
  • t( \\*F ) :對glob的引用是對glob的引用。

  1. «在語法中沒有其他解釋的單詞將被視為帶引號的字符串。 這些被稱為“ 赤字 ”。»

沒有嚴格 ,沒有其他含義的標識符被解釋為裸字,而裸字產生字符串。 這解釋了前兩行(參見第二行的print \\"F" )。

perlref中記錄了globs的插值(第3行)。

*foo{NAME}*foo{PACKAGE}是例外,因為它們返回字符串而不是引用。 它們返回typeglob本身的包和名稱,而不是已分配給它的包。 因此,在*foo=*Foo::bar*foo在用作字符串時將變為"*Foo::bar" ,但*foo{PACKAGE}*foo{NAME}將繼續生成"main""foo" ,分別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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