Chinaunix

标题: Perl新手的"非新手"问题 [打印本页]

作者: nhw_cs    时间: 2011-11-11 11:21
标题: Perl新手的"非新手"问题
希望对perl有深入理解的人回答, 浅尝辄止或经验主义者慎言

Q1: print @array和print "@array"的结果是有差别的, 后者自动添加了空格作为元素间的分隔符显示. 这是print自己特有的处理还是具有一定普片性的现象?

Q2: 函数调用时如果有参数, 似乎括号()是可有可无的, 但直觉告诉我并不一定如此. 加不加括号真的一点差别都没有吗? 如果有, 什么差别?

Q3: 还是函数调用问题。我看到有的参数间需要逗号分隔,有的不要(如 print FD "xxxx"), 为什么?
作者: 小perl    时间: 2011-11-11 11:49
1、print "@array" 数组是作为内插变量(返回标量字符串),返回的结果再作为print的参数,直接print @array是在列表上下文中求值
2、有差别,
3、FD是文件句柄,"XXX"是写入的类容

俺也新人
作者: x9x9    时间: 2011-11-11 11:50
2,如果是函数应该加不加都一样,但是好像如果是OO的方式调用class就不一定了。
作者: nhw_cs    时间: 2011-11-11 12:00
1、print "@array" 数组是作为内插变量(返回标量字符串),返回的结果再作为print的参数,直接print @arra ...
小perl 发表于 2011-11-11 11:49



    我说了,慎言! 你的回答典型的新手,而且有些所答非所问.
作者: sosflyer    时间: 2011-11-11 12:20
回复 4# nhw_cs


    那你说说非新手的回答应该是什么样子的?
   
作者: iakuf    时间: 2011-11-11 12:22
print @array和print "@array"的结果是有差别的, 后者自动添加了空格作为元素间的分隔符显示. 这是print自己特有的处理还是具有一定普片性的现象?

print @array     这个是工作在标题上下文
print "@array"   这个是工作在列表上下文
Perl 中有上下文的概念,你需要理解。
作者: iakuf    时间: 2011-11-11 12:26
Q2: 函数调用时如果有参数, 似乎括号()是可有可无的, 但直觉告诉我并不一定如此. 加不加括号真的一点差别都没有吗? 如果有, 什么差别?

这个《Perl语言编程》 对这个有很详细的讲解。如果是自定义的函数,都建议加上 () ,这样如果没有事先声明的函数也不需要加 & 在前面,会很难看。

&subroutine_name  --不需要事先声明,可以函数写在后面
subroutine_name()    --不需要事先声明,可以函数写在后面
subroutine_name  --需要事先声明,要么函数写在调用前面
作者: 斯文牛氓    时间: 2011-11-11 12:26
print是列表操作符
作者: iakuf    时间: 2011-11-11 12:27
Q3: 还是函数调用问题。我看到有的参数间需要逗号分隔,有的不要(如 print FD "xxxx"), 为什么?

建议看 《Perl 最佳实践》
作者: dugu072    时间: 2011-11-11 12:28
Q1: refer to $" and $,
Q2, 3: refer to function prototype
作者: 小perl    时间: 2011-11-11 12:28
回复 4# nhw_cs


    我只是说了自己的理解,如果没有帮助到你,你可以继续提问!
作者: xfoucs    时间: 2011-11-11 12:46
Q1: print @array和print "@array"的结果

  1.      $"      This is like $, except that it applies to array and
  2.              slice values interpolated into a double-quoted
  3.              string (or similar interpreted string).  Default is
  4.              a space.  (Mnemonic: obvious, I think.)
复制代码
print "@array" 的输出结果与print无关,只与 $" 有关
作者: xfoucs    时间: 2011-11-11 12:54
回复 1# nhw_cs


    Q2: 函数调用时如果有参数, 似乎括号()是可有可无的
这个括号主要是对一些操作列表的函数的优先级有影响
Programming Perl:
In the absence of parentheses, the precedence of list operators such as print, sort, or chmod is either very high or very low depending on whether you look at the left side or the right side of the operator.
作者: xfoucs    时间: 2011-11-11 12:56
print @array和print "@array"的结果是有差别的, 后者自动添加了空格作为元素间的分隔符显示. 这是print自己 ...
iakuf 发表于 2011-11-11 12:22



    print 一直工作在表上下文吧,硬要分的话你这个貌似反了。。。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2