免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 黑色阳光_cu
打印 上一主题 下一主题

有点无语的Perl语法 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-10-25 14:25 |只看该作者
本帖最后由 黑色阳光_cu 于 2010-10-25 14:26 编辑
print $ab[0] 'aaa' 会语法错,因为print会试图给句柄加上*转成GLOBTYPE,像这样子print *$ab[0] 'aaa',结 ...
flw 发表于 2010-10-25 14:23





比较了,差不多。
print $ab[0] 'aaa';
print *$ab[0] 'aaa';

D:\>perl t.pl
String found where operator expected at t.pl line 7, near "] 'aaa'"
        (Missing operator before  'aaa'?)
syntax error at t.pl line 7, near "] 'aaa'"
Execution of t.pl aborted due to compilation errors.

D:\>perl t.pl
String found where operator expected at t.pl line 7, near "] 'aaa'"
        (Missing operator before  'aaa'?)
Global symbol "$ab" requires explicit package name at t.pl line 7.
syntax error at t.pl line 7, near "$ab["
Execution of t.pl aborted due to compilation errors.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
12 [报告]
发表于 2010-10-25 14:30 |只看该作者
能不能更山寨一些?

论坛徽章:
0
13 [报告]
发表于 2010-10-25 14:30 |只看该作者
能不能更山寨一些?
flw 发表于 2010-10-25 14:30



论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
14 [报告]
发表于 2010-10-25 14:36 |只看该作者

论坛徽章:
0
15 [报告]
发表于 2010-10-25 14:38 |只看该作者
flw 发表于 2010-10-25 14:36




反正print不对~~~

论坛徽章:
0
16 [报告]
发表于 2010-10-25 14:42 |只看该作者
回复 9# 黑色阳光_cu


    我查过 perldoc -f print,确实他有说 filehandle 可以是一个 block 的返回值,也提到array必须用 { } 来返回 filehandle, 但我无法理解的是,对大多数函数而言,参数都是在解析后,再入栈调用的,为啥 print 要在编译阶段就拒绝数组元素为参数?你大可以运行时,解析后不对再报错嘛,这里来个条条框框的规矩,有什么特别的目的嘛。

    而对于 <> ,perlop 确实也看到了说明必须是 simple scalar variable, typeglob, or typeglob reference, 我无法理解的是, <$fh> 和 < $fh >为啥会把空格也作为不是 simple scalar 的依据,那么现在看来,<> 其实有一个 'xxx' 单引号的效果,将任何参数做为字符串传递,判定匹配 /^\$?[_\w]+$/ 时,再eval ...  一把,可这也太 bt,我一直当他是普通运算符的……

    所以,对lz的:
print *STDOUT "hello world\n";        # 报错
print STDOUT "hello world\n";        # 正确
    现在倒是容易理解了,我估计所有内置函数需要 filehandle的,都是按照字符串读取的,不匹配/^\$?[_\w]+$/,则编译错(<>例外是因为它有 '...'的效果,容易确认字符串首尾位置)!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
17 [报告]
发表于 2010-10-25 14:43 |只看该作者
别瞎猜了,看代码吧。
在真相的基础上讨论,会更有价值一些。
比如可以讨论一下设计成这样有什么坏处,然后再思考一下为什么会设计成这样。如果不设计成这样,设计成哪样更好一些。

论坛徽章:
0
18 [报告]
发表于 2010-10-25 14:47 |只看该作者
别瞎猜了,看代码吧。
在真相的基础上讨论,会更有价值一些。
比如可以讨论一下设计成这样有什么坏处,然 ...
flw 发表于 2010-10-25 14:43





Perl的源码有点艰深~~~

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
19 [报告]
发表于 2010-10-25 15:03 |只看该作者
Perl5 的语法是发展成今天这个样子的,在发展的过程中,主要有两个因素在起作用:
1,兼容老代码
2,Perl 一向秉持的保护你的手指头+人脑工程学的理念,当然这两个词汇是我总结的

具体来说,就是说 Perl5 看起来不是很整洁,这是由于早期的 Perl 设计的不是很整洁,
再加上 Perl 并不追求整洁造成的。

举个例子:我们手上的键盘上面的每个键,并不是像士兵一样排成几行几纵,甚至很多键的个头都不“匀称”,
这是由于“人体工程学”的原因,比如我们认为小拇指不太灵活,因此把小拇指的键都做的大一倍(退格、回车、shift、TAB、Ctrl 等等)。而我们认为食指最灵活,因此它负责的键就会多一些。
还有拇指最有力,因此就用它来敲击占行文比例最多的字符——空格键。

类似于这样的设计理念,在 Perl 里都是很高的优先级考虑的。

(未完待续)

论坛徽章:
0
20 [报告]
发表于 2010-10-25 15:10 |只看该作者
QWERT键盘也是人体工程学的成果
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP