问一个typeglob的问题

问一个typeglob的问题

sub newopen {
      my  $path = shift;
      local *FH;      # 不是my() 或 our ()
      open(FH,$path);
      return *FH;   # 不是\*FH!
   }
   $fh = newopen("c:\\fh.txt");

while(<$fh>){
        print "$_\n";
        }

这是programming perl中的例子..

问题是为甚么把return *FH 改成 \*FH后...这段代码就不会打印出fh.txt中的内容...

无非是一个是symbolic ref 和hard ref

好像书上说symbolic ref 和hard ref都可以传递filehandle的

$fh = *MYHANDLE;
print $fh "Hello Symbolic Reference to Filehandle \n";


$fh = \*MYHANDLE;
print $fh "Hello Reference to Typeglob \n";

请赐教
用 indirect filehandle 吧,不要用这个了。
啥叫Indirect filehandle

是用IO::file 模块??

那可以解释一下我的问题吗??

谢谢


QUOTE:
原帖由 oi533 于 2009-1-11 17:29 发表
啥叫Indirect filehandle

open my $fh, ...
用这种形式得到的 $fh 就是 indirect filehandle.

QUOTE:
那可以解释一下我的问题吗??

可能是五楼给出的原因,不确定。

newopen内部可以使用\*FH

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl -w

use warnings;
use strict;

sub newopen {
    my  $path = shift;
    local *FH;  # 不是my() 或 our ()
    open(FH,$path);
    my $abc=\*FH; # 不是\*FH!

    while(<$abc>){
        print "$_\n";
    }
}

my $fh = newopen("fh.txt");

大骆驼中有下面一段,不知道跟这个问题是否相关

QUOTE:
尽管通常你可以互换地使用类型团和指向类型团的引用,但还是有少数几个地方是不可以这么用的,简单的类型团不能 bless 成对象,并且类型团引用无法传递出一个局部化了的类型团的范围



QUOTE:
原帖由 ynchnluiti 于 2009-1-11 18:09 发表
newopen内部可以使用\*FH

嗯,这个应该是我对 perlop 中对 <Expr> 的描述的理解有误。
感谢5楼的老大...看来看书不是不仔细