免费注册 查看新帖 |

Chinaunix

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

茴字的多种写法 -- 论神仙代码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-01 22:04 |只看该作者 |倒序浏览
前几天小马的case:

12
23
34
45
56
67


想变成:

1223
3445
5667


一般大家都会想到:

perl -pe 'chomp if $. % 2' file


这个最直观易懂。



但是Randal(Perl hacker,教育家)给出这个方法:

perl -pe 'chomp; $_ .= <>' file


这个实现得更巧妙(偶已解释过),且没有取余运算,效率会更高。



后来John W.(another Perl hacker)秀了一个更smart的方法:

perl -lpe '$\=--$|?$,:$/' file


代码写到这样就是神仙了~~ 反正偶一时半会没看明白~~

我也读过大小骆驼呀、高级编程啥的也读过一堆呀,怎么就想不到呢?

达到这一级,除了经验外,更多的是靠冰雪玲珑心了~~

    --对,一定要有一颗玲珑的慧心~~

看看“Just another Perl hacker”有多少种写法就知道了。


神仙的代码一般人是看不懂的,好在有懂的人出来点拨:

--$|   toggles between 1 and 0. It is this variable's behavior when (--$| or $|--)
       $| is initially 0. (NOTE: this behavior doesn't happen with ++$| or $|++).

-l      chomps the line input and, for when --$| == 1, prints with $\ = $,
      ($, is by default the empty string). When --$| == 0, prints with $\ = $/
       ($/ is by default = "\n").
-p     applies 'print()' as the last statement in the implicit 'while( ... )'  loop

So. in effect, on the first line in, chomps the line. Then, since $|==1 in the first
iteration, prints with a line end equal to $, (by default, the empty string).

In the next line, $| will equal 0, so the print will end with $/ (default value of "\n")




这就是Perl的魅力!聪者自聪,愚者自愚,Perl还是Perl~~

[ 本帖最后由 兰花仙子 于 2009-12-1 22:09 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-12-01 22:12 |只看该作者
强~

论坛徽章:
0
3 [报告]
发表于 2009-12-01 23:00 |只看该作者
和您天壤之别呀

论坛徽章:
0
4 [报告]
发表于 2009-12-01 23:07 |只看该作者
不错
长见识了
不过估计过一个月我也不知道自己写的是啥了

论坛徽章:
0
5 [报告]
发表于 2009-12-01 23:26 |只看该作者
强大啊····但是···代码能读懂就好了···反正是要给别人看的·

论坛徽章:
0
6 [报告]
发表于 2009-12-01 23:52 |只看该作者
长见识了。

论坛徽章:
1
狮子座
日期:2013-12-16 16:09:24
7 [报告]
发表于 2009-12-02 13:57 |只看该作者
perl -lpe '$\=--$|?$,/' file


谁要是在我的组里用这种代码,我一定用刀劈他

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2009-12-02 14:01 |只看该作者
原帖由 ttcn_cu 于 2009-12-2 13:57 发表


谁要是在我的组里用这种代码,我一定用刀劈他

re

论坛徽章:
0
9 [报告]
发表于 2009-12-02 14:29 |只看该作者
原帖由 ttcn_cu 于 2009-12-2 13:57 发表


谁要是在我的组里用这种代码,我一定用刀劈他


这种代码多半是用过一次就扔了的。
给自己增加点乐趣也没什么不好。

论坛徽章:
0
10 [报告]
发表于 2009-12-02 15:52 |只看该作者
小马 是谁?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP