免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2123 | 回复: 6
打印 上一主题 下一主题

问一个typeglob的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-01-11 16:38 |只看该作者 |倒序浏览
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";

请赐教

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2009-01-11 17:27 |只看该作者
用 indirect filehandle 吧,不要用这个了。

论坛徽章:
0
3 [报告]
发表于 2009-01-11 17:29 |只看该作者
啥叫Indirect filehandle

是用IO::file 模块??

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

谢谢

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2009-01-11 17:48 |只看该作者
原帖由 oi533 于 2009-1-11 17:29 发表
啥叫Indirect filehandle

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

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

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

[ 本帖最后由 MMMIX 于 2009-1-11 18:50 编辑 ]

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
5 [报告]
发表于 2009-01-11 18:09 |只看该作者

回复 #4 MMMIX 的帖子

newopen内部可以使用\*FH
  1. #!/usr/bin/perl -w

  2. use warnings;
  3. use strict;

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

  9.     while(<$abc>){
  10.         print "$_\n";
  11.     }
  12. }

  13. my $fh = newopen("fh.txt");
复制代码

大骆驼中有下面一段,不知道跟这个问题是否相关
尽管通常你可以互换地使用类型团和指向类型团的引用,但还是有少数几个地方是不可以这么用的,简单的类型团不能 bless 成对象,并且类型团引用无法传递出一个局部化了的类型团的范围

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2009-01-11 18:49 |只看该作者
原帖由 ynchnluiti 于 2009-1-11 18:09 发表
newopen内部可以使用\*FH

嗯,这个应该是我对 perlop 中对 <Expr> 的描述的理解有误。

论坛徽章:
0
7 [报告]
发表于 2009-01-11 20:52 |只看该作者
感谢5楼的老大...看来看书不是不仔细
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP