Perl notes | Perl语言入门(第四版)笔记

getops

http://search.cpan.org/~nwclark/perl-5.8.5/lib/Getopt/Std.pm
http://hi.baidu.com/longredhao/item/d2efffd308b884b632db9011
 
 
Perl Exit Code:
...
22 The device does not recognize the command.
...

Perl语言入门(第四版) notes

Perl原则

Perl 没有长度的限制,只要你有足够的内存。Perl 的设计哲学,“没有不必要的限制”。String

正如Perl 格言中所说: 做一件事不只一种方法(“There’s More Than One Way To Do It”).            Qw

这在Perl 中是一条通用规则:如果去掉括号含义不变,那括号就是可选的。

第一章概述

Perl 擅长写那些需要在短时间内完成的程序。

Perl 被设计为:90%处理文本,10%针对其它情况。

CPAN Comprehensive PerlArchive Network         http://serach.cpan.org/    http://kobesearch.cpan.org

http://perldoc.perl.org     http://www.perldoc.org  

第二章标量数据

21 数字

211 所有数字内部的格式一致

Perl都把它们当作双精度浮点数来处理. 这就是说在Perl 内部没有整数值。

212 浮点数

有或没有小数点的数字都是允许的(包括+或-号),也可带一个十进制的指数(符号为E)。-6.5e24

213 整数

Perl 允许用下划线来分隔: 61_298_040_283_768

214 非十进制整数

八进制以0 开头,十六进制以0x 开头,二进制0b 开头:0377, 0xff, 0b11111111. (这三个数在Perl 中都代表同一个数255)

当一个非十进制的数字超过4 位时,读起来将很困难。由于这个理由,Perl 允许你使用下划线来区分:0x1377_0B77

215 数字操作符

加(+),减(-),乘(*),除(/)

模数运算符(%): 两个操作数首先变成它们对应的整数值,如10.5%3.2 转换为10%3

指数操作符由两个*号表示,如2**3,表示2 的3 次方,等于8.

◆注意,在模数运算中,如果有一个操作数为负数,那其结果和Perl 的具体实现相关。

◆通常不能进行一个负数的非整数次方的运算。对数学有一定了解的读者知道,这将产生一个复数(数学概念中的复数:如1+2i,译注)。

如果想进行类似的预算,你需要Math::Complex 这个模块

22 字符串

最长的字符串,可以填满整个内存。这符合Perl 的哲学,只要有可能就不加任何内嵌的限制。

有两种类型的字符串:单引号字符串和双引号字符串。

221 单引号字符串

除了单引号,或者反斜线(包括换行字符,如果字符串在下一行继续)之外的任何字符都表示它自身。

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

222 双引号字符串

如果想\和之后的字符成为转义字符(如\n 表示新行),应当使用双引号。

2-1 双引号字符串中的转义符

\L 接着的字符均小写直到\E

双引号字符串另一个性质是可进行变量内插.

233 字符串操作符

字符串可由. 操作符连.

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

复制次数(右操作数)在使用之前会把它转换为小于等于它的整数(如,4.8 变为4)。重复次数小于1 将产生空串(长度为0)。

224 数字和字符串之间的自动转换

大多数情况下,Perl 将在需要的时候自动在数字和字符串之间转换。这完全依赖于标量值之间的的操作符。

当在需要数字的地方使用了字符串: “12fred34”* “3”将给出36 而不会用任何提示.

需要字符串的地方使用了数字: “Z”. 5 * 7 #同于“Z”. 35,或“Z35”

23 Perl 内嵌的警告(warnings)

使用–w 这个参数把警告打开:$ perl –w my_program    or         #! /usr/bin/perl –w          or        

use warnings;

use diagnostics;# 更详细的信息

另一种优化方法是,在命令行中使用–M 这个参数: $ perl–Mdiagnostics ./my_program

24 标量变量

由$开头

大小写是严格区分的

243 二元赋值操作符

$fred+=5;

$str .= “”’

25 print 输出

251 字符串中标量变量的内插

变量名分隔符:花括号({})。”${what}s.”

252 操作符优先级和结合性

表2-2 操作符的优先级和结合性(由高到低)

253 比较运算符

< <= = = >= !=

有趣的字符串比较符:lt le eq ge gt ne。

表2-3 数字和字符串的比较运算符

比较关系      数字   字符串

相等          = =       eq

不等          !=         ne

小于          <          Lt

大于          >          gt

小于或等于    <=        le

大于或等于    >=        ge

26 if 控制结构

26.1  Boolean

Perl 不同于其它的一些语言,它没有Boolean 类型。

● 如果值为数字, 0 是false;其余为真

● 如果值为字符串,则空串(‘’)为false;其余为真

● 如果值的类型既不是数字又不是字符串,则将其转换为数字或字符串后再利用上述规则。undef为false.

27 用户输入

<STDIN>

28 chomp 操作

如果字符串结尾有换行符,chomp可以去掉它。chomp ($text = <STDIN>); #读入,但不含换行符

chomp 是一个函数。作为一个函数,它有一个返回值,为移除的字符的个数。

这又是Perl 中的一条通用规则:除非移除它们时含义会变,否则括号是可以省略的。如果结尾有两个或两个以上的换行符,chomp 仅去掉一个。如果没有,那什么也不做,返回0。

29 while 控制结构

210 undef

undef 既非数字也非字符串,它是另一种标量类型。undef 在需要数字的地方可以自动转化为0,如果是“字符串”,则表现为空串。如到了文件的结尾,则返回undef

211 defined 函数

要分辨其是undef 还是空串,可以使用defined 函数,它将在为undef 时返回false,其余返回true。

第三章列表和数组

列表是指数据,而数组是其变量名。

31 访问数组元素

$fred[0]

如果下标超出了数组的范围,则其值为undef。

32 特殊的数组索引

最后一个元素的索引为$#rocks(最后一个元素的索引值要比其实际包含的元素个数少一)。

负数索引值是-1(最后一个元素). 实际上,几乎没有人使用除了-1 之外的其它的负数索引值。

33 列表

数组是由括号括起来并且其元素由逗号分隔开的列表.

范围操作符(range operator)..,它创建了从左值到右值之间所有值的列表。(1 ..5)

(5 ..1) #空列表— ..中的左值应小于右值,否则为空

列表中的元素并非必须是常数,也可以是在执行此语句时再计算值的表达式. ($m,17)

331 qw 简写

“quoted words”或者“quoted by whitespace”

Perl 将它们当作单引号字符串处理,你不能像双引号那样在qw 中使用\n 和$fred. qw(fred barney betty wilma dino )

whitespace(空格,像spaces,tabs,newlines 等字符串)将被忽略,剩下的组成了列表的元素。qw# fred barney betty wilma dino #

34 列表赋值

列表值也可以赋给变量:($fred, $barney, $dino) = (“flintstone”, “rubble”, undef);

在数组名前加@(后没有中括号)来引用整个数组。读作“all of the(所有的)”.

◆Larry 声称选择美元符号($)和@符号的原因是,可以分别读做$calar(scalar)和@arry(array)。

没有赋值的数组变量的值为( ),空表。和未初始化的标量变量为undef 类似,未被初始化的数组为空表。

341 pop push 操作

push 的第一个参数或者pop 的唯一参数必须是数组变量。

@array = 5..9;

$fred = pop(@array); #$fred 得到9,@array 现在为(5,6,7,8)

如果数组为空,那pop 什么也不做(因为没有元素可以移出),并返回undef。

push 的第一个参数或者pop 的唯一参数必须是数组变量。

342 shift unshift 操作

nshift 和shift 对一个数组的开头进行操作.

35 将数组插入字符串

插入的数组元素会自动由空格分开

36 foreach 控制结构

foreach 从列表的第一个元素一直循环执行到最后一个元素,一次迭代一个: foreach $rocks(@rocks){…}

循环结束时,变量的值会回到循环开始前,如果没有值则为undef。这意味着如果有一个变量和控制变量有相同的名字:“$rock”,不用担心会混淆它们

361 Perl 最常用的默认变量:$_

如果在foreach 循环中省略了控制变量,那Perl 会使用其默认的变量:$_。

foreach(1..10){ #使用默认的变量$_

print “I can count to $_!\n”;

}

362 reverse 操作

reverse(逆转)操作将输入的一串列表(可能是数组)按相反的顺序返回。

注意reverse 返回逆转的列表,它不会改变其参数的值。@fred = reverse @fred;

363 sort 操作

sort 操作将输入的一串列表(可能是数组)根据内部的字符顺序进行排序。

37 标量和列表上下文

372 在列表Context 中使用Scalar-Producing 表达式

如果一个表达式不是列表值,则标量值自动转换为一个元素的列表:@fred = 6*7;

由于undef 是一个标量值,将undef 赋给数组不会清空数组。一个更好的方法是将空列表赋给它.

373 强制转换为标量Context

可以使用函数scalar。scalar @rocks

38<STDIN>在列表Context

<STDIN>在标量context 中返回输入的下一行。在列表context 中,它将返回这个输入文件的所有剩余部分。而每一行将作为一个独立的元素:

@lines = <STDIN>; #将输入读入列表context 中

chomp (@lines = <STDIN>); #读入所有的行,不包括换行符

第四章子程序

53 调用参数

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

<>操作查看@argv 来决定使用哪些文件。如果表为空,则使用标准输入流;否则,使用其找到的相应文件。

@argv = qw# larry mor curly #; #强制使用这三个文件

while(<>){…}

55 使用printf 格式化输出

%g要输出数字,通常使用

%d 为十进制◆整数,根据需要而截尾:

%s 是针对字符串的%x 是针对十六进制的,%o 是针对八进制的。

printf 中的数据通常会接受一个宽度值。如果数据不能满足这个宽度,则会自动扩展开来:

如果宽度值为负数,则为左对齐(对于所有的格式符):print “%-15s\n”, “flintstone”; #输出为flintstone○○○○

%f 根据需要进行截尾,你可以设置需要几位小数点后面的数字:printf “%12f\n”, 6*7 + 2/3; #输出为: ○○○42.666667

要输出一个百分号,可以使用%%,它不会使用后面列表中的元素. “\%”不能正确工作.

56 句柄

Perl 自身有六个文件句柄:STDIN,STDOUT,STDERR,DATA,ARGV,ARGVOUT

原文地址:https://www.cnblogs.com/markjiao/p/2556252.html