Chinaunix首页 | 论坛 | 博客
  • 博客访问: 311429
  • 博文数量: 48
  • 博客积分: 4510
  • 博客等级: 中校
  • 技术积分: 556
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-05 18:19
文章分类

全部博文(48)

文章存档

2012年(1)

2011年(9)

2010年(1)

2009年(12)

2008年(25)

分类:

2008-11-05 23:30:38

Perl 笔记之 古怪的 Perl


Perl 中让我觉得古怪的地方 



  • list literal 和 array
在 scalar context 中,list literal 返回最后一个元素的值,而 array 则返回其中元素的个数。

另外,list assignment 在 scalar context 中返回赋值操作右边表达式返回的元素个数,perldata 中在介绍这个的地方有使用它的例子。

这个问题的详细介绍见 perldata 中的 List value constructors



  • subroutine 中的 @_
在 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
若 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 查询的。


  • bitwise string operator
~ | & ^ 的 operand 可以为 string,例如

print 'p N$' ^ " E;    # prints "Perl\n"


详见 perlop 的 Bitwise String Operators

未完待续!
阅读(1198) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-12-28 22:21:40

败给 blog 的代码插入方式了,怎么搞都搞不好,最后只有编辑 html 源码...