chrisongs的个人空间 https://blog.eetop.cn/chrisongs [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

Perl随记

已有 796 次阅读| 2013-1-2 15:32 |个人分类:技术文章

1. 列表(list)是指标量的有序集合,而数组(array)则是指存储列表的变量。这两个术语常常混用。不过更精确地说,列表指的是数据,而数组指的是变量。

2. 对数组@rocks而言,最后一个元素的索引值是:$#rocks. 这是数字比数组元素的个数少1,因为还有一个编号为0的元素。另外,注意负数索引值得用法,$rocks[-1]指的是数组@rocks的最后一个元素。

3. 对数组右边界进行操作:pop 和 push
    对数组左边界进行操作:shift 和 unshift
    希望添加和移除数组中间的某些元素:splice   可能splice看起来并不起眼,但在其他语言中,要实现相同的功能并不轻松。许多人为达到相同的目的,使用各种复杂的概念和技术,比如链表神马的,但这无疑把程序猿的时间浪费在低层次的数据处理上,既不合理也不高明。

4. reverse会返回次序相反的列表,但它并不会修改传进来的参数。加入返回值无处可去,那这种操作也就变得毫无意义:  reverse @fred;   #错误——这不会修改@fred的值
          @fred = reverse @fred;  #这才正确嘛

5. each操作符:从perl5.12版开始支持。每次对数组调用each,会返回数组中下一个元素所对应的两个值:该元素的索引以及该元素的值。

6. scalar:强制切入标量上下文。

7. <STDIN>在标量上下文中会返回输入数据的下一行;在列表上下文中,则会返回所有剩下的行,直到文件结尾为止。返回的每一行都会成为列表中的一个元素。

8. sub NAME {
my($m, $n) = @_;
... ...
... ...
} 几乎所有的子程序都会以类似的程序代码作为开头。当你看到这一行时就会知道,这个子程序具有两个标量参数。

9. 可以用state来声明变量,它会告诉Perl该变量属于当前子程序的私有变量,并且在多次调用这种子程序期间保留该变量的值。类似C语言中的static

10. while (<STDIN>) {
print "I saw $_";
}
从字面上讲,它的意思是:“读取一行标准输入,看它是不是为真(通常是)。若是真,就进入while循环,并在下次循环时忘记刚刚读入的那一行,进入下一行!”
类似的结构还可以这样写:
while (defined($line = <STDIN>)) {
print "I saw $line";
}

11. 如果在列表上下文中调用行输入操作符,它会返回一个列表,其中包含所有的输入内容,每个列表元素代表一行输入内容:
foreach (<STDIN>) {
print "I saw $_";
}
它和10的区别是:在while循环里,Perl会读取一行输入,把它存入某个变量并且执行循环的主体,接下来它会回头寻找其他的输入行。但是在foreach循环里,行输入操作符会在列表上下文中执行(因为foreach需要逐项处理列表内容)。为此,在循环能够开始前,它必须先将输入全部读进来。加入输入来自400MB大小的Web服务器日志文件,它们的差异会十分明显!因此最好的做法通常是尽量使用while循环的简写,让它每次处理一行。


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 2

    粉丝
  • 0

    好友
  • 1

    获赞
  • 4

    评论
  • 412

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-12 13:21 , Processed in 0.019419 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部