为什么ref不返回'GLOB'?

Eug*_*kov 3 perl ref filehandle typeglob

我想更好地理解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";
}
Run Code Online (Sandbox Code Playgroud)

输出是:

>>F<<
>>SCALAR(0x1e67fc8)<<SCALAR
>>*main::F<<
>>GLOB(0x1e53150)<<GLOB
Run Code Online (Sandbox Code Playgroud)

为什么GLOB仅在最后一种情况下被返回?

ike*_*ami 8

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

  1. «在语法中没有其他解释的单词将被视为带引号的字符串.这些被称为" 赤字 ".»

  • [glob](http://perl5.git.perl.org/perl.git/blob/5a4fed095144d9c2f728401b3a0938f80aca4bcc:/gv.h#l11)是一个C结构.与往常一样,如果您想查看Perl变量的内部,请使用Devel :: Peek.`perl -MDevel :: Peek -e'Dump(*STDOUT)'`.我想你想读[illguts](http://search.cpan.org/dist/illguts/) (4认同)
  • 你说你想要转储一个glob,而不是一个IO对象.转储glob不会递归,但您可以转储IO对象本身.`perl -MDevel :: Peek -e'Dump(*STDOUT {IO})'`.没有光标(在OS端),可以使用`PerlIO :: get_layers`显示图层. (3认同)