Perl 笔记之 古怪的 Perl
Perl 中让我觉得古怪的地方
在 scalar context 中,list literal 返回最后一个元素的值,而 array 则返回其中元素的个数。
另外,list assignment 在 scalar context 中返回赋值操作右边表达式返回的元素个数,perldata 中在介绍这个的地方有使用它的例子。
这个问题的详细介绍见 perldata 中的 List value constructors
在 subroutine 中,@_ 是一个 local array,其成员(element)是到对应标量实参(scalar parameter)的 alias。单独修改 @_ 的成员会修改对应的实参,但对 @_ 作为整体进行赋值,则是修改 @_ 本身,不会改变任何实参。
这个问题的详细介绍见 perlsub
- 用 ++ 来自增值为字符串的 scalar variable
Perl 的 ++ 可以用来自增值为字符串(匹配 /^[a-zA-Z]*[0-9]*\z/)且从初始化后就只在 string context 中使用过的变量,例如:
print ++($foo = 'a'); # print b print ++($foo = 'z'); # print aa print ++($foo = 'a9'); # print b0 print ++($foo = '1'); # print 2 print ++($foo = '9'); # print 10
|
++ 在自增 $foo 时,不但会考虑其中的字符属于那个域(大写或小写字母,或数字),而且还带进位。
这个问题的详细介绍见 perlop 的 Auto-increment and Auto-decrement
若 continue BLOCK 是在 while/foreach BLOCK 之后,那么即使在 while/foreach 的 BLOCK 中使用了 next,continue BLOCK 的代码仍然会执行。
另外,Perl 5.10 增加了 switch 语句(详见 Perl 5.10 perlsyn 的 Switch statements),在其中 continue 又有其他意思。
详细描述见 perldoc -f continue
又,按说 continue 是个控制结构,可通过查函数的方式竟然能查到它的手册
BTW, 其实像 print 这类的 operator 的手册也是通过 perlfun 查询的。
~ | & ^ 的 operand 可以为 string,例如
print 'p N$' ^ " E; # prints "Perl\n"
|
详见 perlop 的 Bitwise String Operators
未完待续!
阅读(1254) | 评论(1) | 转发(0) |