免费注册 查看新帖 |

Chinaunix

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

为啥要加->? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-06-24 10:38 |只看该作者 |倒序浏览
最近看一个大侠放在网上的源文件,发现他使用PERL的方式比较高明,我没看懂。
求各位大神帮忙解释下:
my @stocklist                 = (
sub { map {"sh$_"} ('600001' .. '602100') }->(),
sub { map {"sz$_"} ('000001' .. '001999') }->()


sub{}->()这种格式我以前没用过,这是什么意思? 为啥后面要加上  ->()?
试了如果不使用sub{}->(),的方式而是使用map {"sh$_"} ('600001' .. '602100') ,map {"sz$_"} ('000001' .. '001999')  则只有前面的一句MAP有效。

大神们请发个材料看看或解释下sub{}->(),谢谢

论坛徽章:
78
双子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06狮子座
日期:2013-10-18 13:40:31双子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56处女座
日期:2013-10-24 17:15:30双子座
日期:2013-10-25 13:49:39午马
日期:2013-10-28 15:02:15
2 [报告]
发表于 2015-06-24 11:24 |只看该作者
匿名函数引用

论坛徽章:
78
双子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06狮子座
日期:2013-10-18 13:40:31双子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56处女座
日期:2013-10-24 17:15:30双子座
日期:2013-10-25 13:49:39午马
日期:2013-10-28 15:02:15
3 [报告]
发表于 2015-06-24 11:41 |只看该作者
回复 1# sandy_amao


    只有前面的一句MAP有效   是什么意思

论坛徽章:
0
4 [报告]
发表于 2015-06-24 11:50 |只看该作者
回复 3# yybmsrs

即第二句的MAP不起作用,不会出现在数组中
   

论坛徽章:
78
双子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06狮子座
日期:2013-10-18 13:40:31双子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56处女座
日期:2013-10-24 17:15:30双子座
日期:2013-10-25 13:49:39午马
日期:2013-10-28 15:02:15
5 [报告]
发表于 2015-06-24 11:54 |只看该作者
回复 4# sandy_amao


    你再仔细的看看

论坛徽章:
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
6 [报告]
发表于 2015-06-24 15:15 |只看该作者
回复 4# sandy_amao

为啥第二个MAP不起作用,谢谢
   

论坛徽章:
0
7 [报告]
发表于 2015-06-24 15:21 |只看该作者
本帖最后由 sandy_amao 于 2015-06-24 15:22 编辑

回复 6# substr函数


搞明白了。谢谢



@stocklist = ( map {"sh$_"} ('600001' .. '600003'), map {"sz$_"} ('000001' .. '000002'));
print "@stocklist\n";
结果:
sh600001 sh600002 sh600003 shsz000001 shsz000002

@stocklist = ( (map {"sh$_"} ('600001' .. '600003') ), map {"sz$_"} ('000001' .. '000002'));
print "@stocklist\n";
结果:
sh600001 sh600002 sh600003 sz000001 sz000002

论坛徽章:
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-06-24 15:23 |只看该作者
回复 7# sandy_amao
谢谢

   

论坛徽章:
0
9 [报告]
发表于 2015-07-01 15:09 |只看该作者
就是两个list 拼在一起,和下面效果是一样的
my @stocklist = (
               (map {"sh$_"} ('600001' .. '602100')),
               (map {"sz$_"} ('000001' .. '001999'))

论坛徽章:
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
10 [报告]
发表于 2015-07-08 22:45 |只看该作者
本帖最后由 MMMIX 于 2015-07-08 22:50 编辑
sandy_amao 发表于 2015-06-24 10:38
大神们请发个材料看看或解释下sub{}->()


sub { ... } 返回一个匿名函数引用,->() 是调用该函数,所以 sub { ... }->() 就相当于把 ... 放在函数中执行,为了防止第二个 map 的返回值被当作第一个 map 的参数的一部分。

sub 的介绍见 perldoc -f sub
reference (引用) 的介绍见 perldoc perlref

当然,由于 Perl 的 list (array) 会对 sublist 自动做 interpolation (见 perldata),用 () 把那两个 map 表达式括起来也是一样的效果,而且更简单些。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP