QuXiao

每天进步一点点!

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  50 随笔 :: 0 文章 :: 27 评论 :: 0 Trackbacks

寒假期间看了一本关于Perl的入门书籍,感觉不错,下面是一些读书笔记:


你将看到整数(如255,2001 等)和浮点数(有小数点的实数,如3.14159,1.35x1025),但在内部,Perl 都把它们当作双精度浮点数来处理


61298040283768,Perl 允许用下划线来分隔它,因此可以像下面这样书写:61_298_040_283_768

和C,C++不同,Perl 中NUL 字符没有特殊的含义。Perl 能计算长度,不用靠null 来判断字符串是否结束。

单引号字符串中的\n 不会被当作换行符来处理,其仅仅是两个字符\和n。只有在反斜线(\)后面接的是\或单引号’,其才会被当作特殊符号来处理。

一个特殊的操作符是字符串重复操作符(string repetition operator),由小写的字母x 表示。
“fred”x 3        #“fredfredfred”
“barney”x (4+1)  # “barney”x 5, “barneybarneybarneybarneybarney”
5 x 4             #实际上是“5”x 4, “5555”

标量变量在Perl 中由$开头

列表和数组可以包含任意数量的元素。最少含有0 元素,最多可以填满你的可用内存。这里又体现了Perl 的设计哲学,“没有不必要的限制”。

rocks 数组,其最后一个元素的索引为$#rocks

Larry 提供了一种简便方法:数组的负数索引值从最后一个元素开始
负数索引值是-1表示最后一个元素

一个给定的表达式在不同的上下文中其含义是不同的。
$fred = something;                # 标量context
@pebbles = something;          #列表context
($wilma,$betty) = something; #列表context
($dino) = something;             #列表context

当Perl 遍历此子程序时,将会计算每一步的值。此子程序中最后计算的值将被返回。

这是Unix中很少人知道的一个事实:如许多标准的工具,如cat,sed,也使用这种约定,连接号(-)代表标准输入流。

技术上讲,<>从数组@ARGV 中得到调用参数。

printf“The items are:\n”. (“%10s\n”x @items), @items;

程序的名字在Perl 的特殊变量$0 中

只有Perl 成功的重新打开新的连接,否则是不会关闭以前的连接。

要引用整个hash,使用百分号(“%”)作为前缀

使用delete 后,hash 中将不会存在此key;如果其值是udnef,则key 是存在的。

不要将正则表达式和shell 中的文件名匹配模式,globs 混淆了.

Perl 中,注释可以被作为空白

使用绑定操作符(=~)将告诉Perl 将右边的模式在左边的字符串上进行匹配,而非对$_匹配。

@fields = split /:/,“abc:def::g:h”; #得到(“abc”, “def”, “”, “g”, “h”)
这里有一条规则:开头的空元素会被返回,但结尾的空元素被丢弃
@fields = split /:/, “:::a:b:c:::”; #得到(“”, “”, “”, “a”, “b”, “c”);

默认时,split 对$_操作,模式为空白:
my @fields = split; #同split /\s+/, $_;

如果没有指定文件名,则其从标准输入流中自动打开和关闭一系列文件进行读入。如果$^I中有字符串,这个字符串则会成为备份文件的扩展名。

?号在正则表达式中的第四种用法:问号,表示0 或1 的数量词,非贪婪修饰符,现在是开头符

条件表达式也是先被求值的,虽然被放在后面

last 会立刻结束循环。(这同C 语言或其它语言中的“break”语句类似)

可以使用last 从“裸的”代码块中跳出。

next 之后,又会进入下一轮循环(这和C 或者类似语言的“continue”相似)

redo会调到当前循环块的顶端,不进行条件表达式判断以及接着本次循环。

标签在整块之前使用;不是针对代码中的某些点

-T和-B分别检测一个文件是文本的还是二进制,那Perl是怎样知道的呢?答案是Perl欺骗了我们:它打开一个文件,查看前面几千个字节,进行合理的猜测。如果没有太多的怪异符号,则其像文本

每当在程序中使用stat, lstat,或文件检测(file test)时,Perl 就会要求系统分配一块stat buffer给文件(也就是,stat系统调用所返回的buffer)。这就意味着如果想知道文件是否是可读且可写的,需要对相同的信息进行两次系统调用

这暗示了一个目录的连接数等于2 (.和..)加上其包含的子目录的个数。

在Perl 中,环境变量可以通过%ENV 这个hash 变量得到

对于system和exec,其输出的结果传到Perl标准输出的地方。有时,将其结果作为字符串保留下来以便进一步处理是很有趣的。这可以通过使用反引号(`)而非单引号或者双引号做到

Perl 提供了处理严重错误的方法:将这些代码放入eval 块中

eval 是一个表达式(不是像while 或foreach 那样的控制结构),因此结尾处的分号是必须的。

如果eval 捕捉到了严重错误,则返回值为undef 或空列表,依赖于其context

如果将列表的一个元素被赋给undef,则意味着忽略此元素:
my(undef, $card_num, undef, undef, undef, $count) = split /:/;

同array slice一样,(hash slice)变量前的符号($或@符号)决定了下标表达式的context。如果前面是$符号,则下标表达式是在标量context 中被求值,得到一个值◆。如果之前为@符号,则下标表达式在列表context 中被求值,得到一列值。

posted on 2009-02-02 14:36 quxiao 阅读(591) 评论(1)  编辑 收藏 引用 所属分类: 读书笔记

评论

# re: 《Perl入门》读书笔记 2011-01-10 15:28 gg
挺好的!  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理