免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4483 | 回复: 10
打印 上一主题 下一主题

请教perl的句柄引用 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-18 10:42 |只看该作者 |倒序浏览
今天尝试性的把perl的句柄引用放到hash里面,然后。。

my $hash;
open $hash->{'fh'}, "> out.txt" or die "$!";
print $hash->{'fh'} "out";
#-----------------------------------------------------------------------
String found where operator expected at aa.pl line 9, near "} "out""
        (Missing operator before  "out\n"?)
syntax error at aa.pl line 9, near "} "out\n""
aa.pl had compilation errors.
#-----------------------------------------------------------------------
似乎perl 不让这么写
那么


print($hash->{'fh'} = "out";
#-----------------------------------------------------------------------
out
#-----------------------------------------------------------------------
娃给我输出到stdout啦  


最后是这么弄了一下

my $fh = $hash->{fh};
print $fh "out\n";

这样倒是可以正确输出到文件了


#-----------------------------------------------------------------------
这个是在找相关信息时找到的一个帖子
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3747544

第一个出错似乎是perl语法规定的问题,第二个个人不理解了
是因为print函数形式的时候的指定句柄不能是匿名句柄吗,然后会因为找不到而
输出到stdout ...

相关帖子的8l,flw 解释了一下,然而并不是很懂诶。。求教
walklan 该用户已被删除
2 [报告]
发表于 2015-05-18 11:27 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2015-05-18 13:14 |只看该作者
回复 2# walklan


    嗯,谢谢你的解答

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
4 [报告]
发表于 2015-05-18 14:12 |只看该作者
和散列的语法没关系:

你可以站在语言设计者的角度看这个问题:

  1. print $a $b, $c;
复制代码
如果 $a 是句柄,那么如何让解释器明白它一定不是一个调用后面参数的函数引用呢?因为:

  1. my $a = sub { length( shift ) };
  2. print $a $b, $c;
复制代码
这样的代码,解释器该怎么处理呢?

所以,要用到特别的句法: { $a }, 这在<<Perl语言最佳实践>> 中有明确讲解。

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
5 [报告]
发表于 2015-05-18 14:12 |只看该作者
本帖最后由 104359176 于 2015-05-18 14:13 编辑

重复的帖子,怎么删除呢?

论坛徽章:
0
6 [报告]
发表于 2015-05-18 15:05 |只看该作者
回复 4# 104359176


    谢谢 ,虽然不是很懂匿名的子函数。。

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
7 [报告]
发表于 2015-05-18 18:15 |只看该作者
回复 6# flyingdancen


在 Perl 语言中,函数本身可以被保存起来,并且可以有变量一样的名字,即使是匿名函数。这在很多语言中是没有的,包括 C++, Java, 即使在 Python 和 Ruby 中,也很少表现出来。这是函数式语言的特征,函数是 first class, 可以被保存,被当成参数传递。

当很多语言一直在争论传值还是传引用的时候,最应该讨论的是如何传递算法。

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
8 [报告]
发表于 2015-05-19 11:53 |只看该作者
回复 7# 104359176

Python函数名是变量
   

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
9 [报告]
发表于 2015-05-19 15:45 |只看该作者
回复 8# substr函数

    Python 代码优美,第三方库丰富稳定,应用众多,速度飞快。

    对 Python 感到悲哀的是,所有的东西既然都是对象,都能当成参数传递,为什么设计不出来一个不带括号的 print.

    因为所有的函数调用的语法必须是 func-name(arg1, arg2);

    Perl 中设计函数,通常会让句法更简单一些,但 Python 不管怎么想办法,就是不能设计一个让句法简单的
    函数。

    Ruby 中,虽然传递的匿名函数每次只能有一个,但句法上的应用足够了:
  1. 6.time { puts 'say hello' }
复制代码
如果调用参数是函数的函数不能让代码书写更简洁,那么这个函数顶多有 Carrying (柯里化)的功能。

   Python 真的很好,但确实有遗憾。
   
   为什么 Python 中很少使用把函数当成参数的函数,就是因为函数对句法的影响很有限。

   一个列表推导,就让人兴奋的语言,还公然叫嚣自己就是 Lisp, 为了一个 print 后面的括号,就和用户闹翻的语言。

   

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
10 [报告]
发表于 2015-05-19 22:50 |只看该作者
不要纠结了,用Ruby吧,perl6的现实实现 回复 9# 104359176


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP