1. 所有数字的内部格式都相同。 Perl内部并不存在整数值--程序中用到的整数常量会被转换成等效的浮点数值。
2. 长长的数字可以用"_"分隔: 61_297_768,这样易读且不容易出错
3. 乘幂操作符: ** , eg: 3的5次方 3**5
4. 单引号中的字符串中只对 '\'和'''转义即可,例如: '\n'是2个字符,反斜杠和n两个字符。
5. 双引号中的字符串和c语言中的类似,新特性是可以使用标量变量内插。
6. 字符串操作符:'.'(和php一样)和 'x'(后跟复制次数表达式) 分别用于连接和复制次数。
7. Perl内建警告信息:
$perl -w my_program
#!usr/bin/perl -w
5.6以上版本可以使用:
#!/usr/bin/perl
use warnings;
有警告选项后想知道详细警告的内容,可以再用 use diagnostics;
8. 字符串"0"是唯一被当成假的非空字符串
9. 获取用户输入: $line = <STDIN> 带换行符。若想去掉换行符,用 chomp($line);可以写成一步: chomp($line=<STDIN>)
chomp 返回值,如果有换行符号,则删掉一个(有多个时也删除一个),返回1否则返回0
10. undef是一个特殊类型, 是整数时为0, 字符串时为空。
在读到文件结束时,<STDIN>会返回undef,测试时可以使用 defined函数,
$line = <STDIN>
if ( defined($line)){...}
else{over;;;}
11. 数组的命名空间和标量名字空间是完全分开的,所以可以有$line和$line[10]同时存在,编程时注意不要混用,否则维护起来麻烦。
12. 下表问题。 数组长度: $#arrayname:数组长度减1的值,即最后一个元素的下标。
Perl中数组的下表还可以使用负数,-1代表最后一个元素。
13. 列表直接量: (1,2,3) ()
范围操作符: ".." ,只能自增1, 例如(1..4)是(1,2,3,4) ,而写成(4..1)则实际为空列表()
列表中的字符串简写,不用写引号界定字符串用qw qw(fred barney betty) 其中的qw后面的'('为界定符,可以使用其他的。
注意:因为我qw算是一种引号,所以不能将注释放在qw列表中。
14. 引用整个数组: @arrayname=@another_arrayname
15. 数组操作:末尾操作 pop push, 首部操作: shift, unshift
16. 字符串中的索引表达式会被当成普通字符串表达式。
17. Perl ”老地方“ 也就是默认的变量: $_
18 排序: sort 从小到大, 若相反, 用 reverse sort(), 另外对于数字排序结果是错误的,即只能用于字符串。不知道数字会咋搞。
19. 标量上下文与列表上下文: 同一个表达式,出现在不同的地方会有不同的意义
20. 清空数组的方法: @betty = ();
而这样: @betty = undef 是得到一个列表,而且仅有一个元素为未定义。
21. 强制执行标量上下文: scalar 伪函数 例如 print scalar @rocks 是数组大小
22. 子程序名有自己独立的命名空间,不会和变量混淆,并且使用时使用关键字sub表明,调用时使用&。
子程序的定义是全局的,如果重名,后面的会将前面的覆盖掉。
23. 子程序如果有参数,可以像使用c函数那样传递,但在子函数中,使用参数时是利用:$_[index]的方式,注意,$_和$_[]是不同的
24. 子程序的私有变量 用my声明。在 My 不使用括号时,只用来声明单个词法变量。
eg: my $fred, $$barney; #$barney没有被声明为私有
my ($fred, $barney); #声明了2个
25. 高水线算法(high-water mark) :大水过后,在最后一波浪消退时,高水线会标示出最高的水位。
26. use strict 编译命令使检查语法更加严格,例如先定义再使用等。
27. 函数的调用使用&问题,如果在调用前,编译器已经看到了函数的定义,则可以省略,此外,如果自定义的函数和内置函数重名,使用&将调用自己定义的函数,
所以总是使用&是一个良好的习惯。
28. 持久性性私有变量:用关键字state。 state $n=0;
在使用数组和哈希类型的state变量时,还有一些轻微的限制。在Perl5.10中我们不能在列表上下文中初始化这两种类型的state变量。
eg:state @array = qw(a,b,c); #错误
29. 在使用列表的上下文中调用“行输入操作符”会返回一个列表:
foreach (<STDIN>) {
print " I saw $_"
}#此时虽然输出正确,但是会将所有数据先读入列表,然后分别存到$_中进行运算。
30. 由于钻石操作符通常会处理所有的额输入,所以当它在程序里出现好几次时,通常是错误的。
31. 假如它看起来像函数调用,它就是函数调用: print (2+3)*4 输出5
32. 6个Perl保留的文件句柄:STDIN STDOUT STDERR DATA ARGV ARGVOUT
33. 文件打开: open FILENAME, "< infilename" or
open FILENAME, ">" , "filename"
文件关闭: close FILENAME
34. 使用文件句柄: if ( ! open PASSWD, "/etc/passwd") {
die " How did you get logged in ? ($!)" #die 会终止程序,$!为系统提示错误。warn可以模拟警告。
}
while(<PASSWD>){}
print PASSWD "something"
改变默认的文件输出句柄: select BEDROCK
print "this will apperance in the BEDROCK file";
35. 带换行的打印: say ,类似于 print(不带格式字符串) ,不同于printf(带格式字符串)。
@@@@@@@@@ 第 6 章 哈希 @@@@@@@@@@@@
36. 哈希的键和值都是任意的标量,但是键总是会被转换成字符串。
37. 访问整个哈希: %hashname , 引用一个hash: $hash_name{$key}
38. hash 操作:
each 函数: while( ($key, $value) = each %hash ) {...}
keys %books:得到关键字列表
values %books : 得到值列表
exists $book{$var}
delete $book{$var}
内插值:单一的哈希元素在双引号中是可以的,但是整个哈希的内插是不支持的。
eg: print "$person has $books{$person} items\n" 正确
print "%books" 只会出现六个字符而已
Perl 把环境变量存在 %ENV 哈希表中
@@@@@@@@@ 第 7 章 漫游正则表达式王国 @@@@@@@@@@@@
39. 使用简易模式: 如果匹配的对象在$_中,则只要把模式写在//中间就可以了
$_="abbaabba"
if ( /abba/ ) {}
注意: . 只能匹配一个字符,并且是除换行以外的字符。
简易的量词: *+?
[\d\D] : 匹配数字和非数字,也就是所有可能的字符一次。
组的用法。/((.)(.)) \g{3}/ # \g{}中跟组的标号,组的标号从左括号出现的顺序决定
@@@@@@@@@ 第 8 章 正则表达式进行匹配 @@@@@@@@@@@@
40. 可选修饰符
/i 忽略大小写
/s 使.可以匹配换行,此时.相当于[\d\D]
/x 加入空白,允许空白,匹配时自动略去。
锚位: ^: 行首
$:行尾
\b:单词首尾
匹配横向制表符: \h = [\t ]
绑定操作符号: =~ 作用直接用右边的模式来匹配左边的字符串而不是匹配$_
$some =~ /\byes\b/
模式串中也可以有内插
捕获变量: if ( /(ssss) / ) {print $1},如果比对失败,$1中可能是上次的遗留信息。
不捕获变量 if ( /(?:ssss) (bbb) ) {print $1} $1 是(bbb)匹配的
命名捕获: if ( /(?<name1>pattern) \g{name1) \k{name1} \g{1} \1} 都可以
print $+{name1} 使用
自动匹配变量: ($`)($&)($'):匹配前、匹配的、未匹配的
如果使用了这些自动变量,会拖慢后面的正则表达式的速度,所以一些程序员宁可在这里加一个括号来达到目的
正则表达式的优先级:
圆括号
量词
锚位和序列
择一
元素
正常的匹配是用 m//来匹配的
@@@@@@@@@ 第 9 章 用正则表达式处理文本 @@@@@@@@@@@@
41. 替换: s/// 也可以用 s{}()等等
可选修饰符: /g , /s , /i
绑定操作符:=~
大小写转换; \U将后面的所有字符转换成大写
\L 将后面的所有字符转换成小写
\E 结束大写转换
\l 只转换一个小写
\u 只转换一个大写
split 操作符: @fields = split /separator/, $string
split 会保留开头处得空字段,并省略结尾处的空字段。
split 默认会以空白字符分隔$_
my @fields = split;
join 函数
my $z = join "-", @array
贪心模式量词和非贪心量词
贪心匹配:尽可能多的匹配,在出现后面无法匹配时吐出一些,再匹配,如果成功,继续,否则再吐,再匹配。很多回溯。
非贪心模式匹配:尽可能少的匹配,匹配上一个就继续下面的模式,如果不匹配则吞一个再匹配,相当于一点一点往前匹配。
+: +?
*: *?
这两种情况要根据实际情况来选择。
跨多行匹配: /m multiple lines
一次更新多个文件: $^I='.bak'
@@@@@@@@@ 第 10 章 其他控制结构 @@@@@@@@@@@@
42. unless : 相当于 if (condition == false{}
until(){}
elsif
last 相当于 break
next 相当于 continue;
redo 回到循环顶端,不是下一次迭代而是重新执行本次循环。
”定义否“操作符: // eg: my $last_name = $last_name{$some} // '(No last name)'
第 13 章 目标操作
使用文件通配获取文件名: my @pm_files = glob "*.pm"; 另一种写法: my @dir_files = <$dir/* $dir/.*>
目录句柄: opendir DH, $dir_name or die "Cannot open $dir_name:$!"
closedir DH;
Unix 上有个鲜为人知的事实:某个文件可能你无法读取、写入、执行。其实它根本就是别人的文件,但你还是可以将它删掉。这是因为删除文件的权限跟文件本身的权限位无
关,它取决于文件所在目录的权限位
删除文件 unlink (name1,name2)
rename "old" "new" 相当于mv命令
链接的另一个限制,就是不能为目录建立额外的名称。
软链接:符号链接, symlink "filename" "linkname" 这样就可以跨越文件系统了,软链接可以指向目前还不存在的文件。并且不会增加inode的连接数。
链接信息的获取: my $where = readlink "linkname"
oct函数能强行把字符串当成八进制数字处理,无论它是否以零开头:
mkdir $name , oct($permissions)
删除空目录: rmdir $dir or warn "cannot rmdir $dir : $!"
简历临时文件时,使用进程号: $$
删除子目录,参照 File::Path
chmod 0755, "file1", "file2"; #这里只接受数字权限
更改隶属关系: chown $user, $group, "filename"; # $user 和$group 必须是数字的,可以用 getpwnam 将用户名翻译成数字, 用getgrname 将组名翻译成数字。
搜索子串的位置: my $stuff = index ( $big , $small ); $stuff = index ( $big , $small, $big+$stuff); 返回-1时是找不到。
用substr处理子串: $part = substr($string, $initial_postion, $length);
sort 中自己的比较函数:
sub by_num {
if ( $a < $b ) {-1} elsif ( $a > $b ) {1} else {0}
} # $a 和 $b 是实际的两个值,修改会改变列表中的值,所以不要修改。
可以用飞碟操作符比较数字: <=> :
sub by_num { $a<=>$b}等同于上面的效果
比较字符串的: sub by_string { $a cmp $b }
使用: my @result = sort by_num @some_numbers;
sub case_insensitive { "\L$a" cmp "\L$b"}
智能匹配: ~~
given-when控制结构:
given ( $ARGV[0]){
when( /fred/i ) {}
default {}
}
用map和grep对列表进行转换。数组切片、哈希切片、
/*****************************************
2013.3.18 重新看一遍
*****************************************/
单引号不转义,不替换
undef defined
如果有undef的变量,又不知道在哪,可以用:
#!/usr/bin/perl -w
几个简单函数:
length()
uc,lc,ucfirst, lcfirst
sin
rand(),srand()
$lastchar = chop($str); #截去最后一个字符
$result = chomp($str);#截去末尾的行分符号,行分符号由$/定义
控制结构:
if() {} elif () {} else {}
unless() {}
until() {}
do{} until()
while() {}
for(;;) {}
foreach
循环控制:
last:退出循环
next:进入下一循环
redo:重新执行本次循环
goto
continue{}
die 函数: 输出错误信息后,推出程序
warn : 输出警告信息,但不退出。
$! : 内部变量,包含错误代码
$@: 内部变量,包含错误信息
shift(@a)
unshift(@a)
reverse @a
push(@a, $b)
pop(@a)
join(连接符号, @a)
split(//, @a, length)
splice: @ret = splice(@a, skip, length, @newlist); length=0时为插入
@ret中存放的是skip后,length个@a中元素的值,
@a会被改变为替换后的array。
@found = grep (/pattern/, @a)
map(expr, @a)
数组长度: $#a
打印数组: print @a ; #直接相连
print "@a"; # 空格分隔
匹配模式: m//, s///, tr///
匹配选项: g, m, s, o, x, e, i
g 是 取消贪婪,每个满足的都匹配。
m 是按多行来看待字符串进行匹配
s 是将字符串按照单行来进行匹配。例如多行中的换行只看做\n
o
x 忽略空格等空字符
e 先计算替换模式里的expr,然后再替换
i 忽略大小写
相关推荐
Perl语言编程和Perl语言入门是两个关键的学习领域,分别对应着对Perl的深入理解和基础掌握。 《Perl语言编程》可能是关于Perl的高级教程,涵盖了语言的复杂特性,如正则表达式、模块化编程、对象导向编程、异常处理...
本教程将带你逐步了解Perl语言的基础知识,帮助你从入门到掌握。 首先,Perl语言的设计理念是“实用胜于完美”,因此它的语法在某些方面可能显得较为自由,但这恰恰也是其灵活性的体现。Perl支持多种编程范式,包括...
总的来说,Perl语言入门和进阶学习需要掌握其独特的语法、强大的文本处理能力、模块化编程和丰富的库资源。通过"learning perl.pdf"和"Perl_语言编程.chm"这两本书,读者可以逐步建立起对Perl的全面认识,并能够运用...
如果刚开始学习Perl这门语言,那么《Perl语言入门(中文版第6版)》就是你所需要的——不管你是一名程序员,还是系统管理员,抑或是网络黑客。这本书被整整两代Perl用户昵称为“小骆驼书”,《Perl语言入门( 中文版第6...
《perl语言入门》也就是大家所称道的“小骆驼书”,是perl程序设计人员最为仰赖的启蒙读物之一。自1993年以来,这本书就成为热卖的perl语言教学材料,而此次新版又涵盖了perl 5.10的最新变化。本书的诸位作者自1991...
《Perl语言入门》也就是大家所称道的“小骆驼书”,是Perl程序设计人员最为仰赖的启蒙读物之一。自1993年以来,这本书就成为热卖的Perl语言教学材料,而此次新版又涵盖了Perl 5.10的最新变化。本书的诸位作者自1991...
Perl语言是一种功能强大的脚本编程语言,尤其适合文本处理和系统管理任务。本文将深入探讨Perl的命令行应用,帮助初学者快速入门。 首先,Perl有很多命令行参数,这些参数可以增强Perl程序的功能和安全性。其中,`-...
在Perl语言的发展历程中,它的第6版教材《Perl语言入门》被广泛认为是Perl学习的入门经典,非常适合初学者学习。这本书由Randal L. Schwartz, brian d foy和Tom Phoenix共同撰写,盛春负责翻译,由O'Reilly Media...
以下是对Perl语言入门学习的关键知识点的详细说明: 一、Perl程序的编译与运行 Perl程序不需要预编译,直接通过Perl解释器运行。在命令行中输入`perl my_program`即可执行程序。若希望开启警告模式,可在命令行中...
"Perl语言入门"的资源提供了中英文两个版本的PDF教程,这对于初学者来说是一份宝贵的自学材料。 首先,Perl语言的核心特性是其强大的字符串处理能力。Perl中的字符串可以动态增长,并且支持模式匹配和替换操作,这...
Perl语言学习 Perl语言是由Larry Wall在20世纪80年代开发的一种开源的高级语言,它结合了低级语言和高级语言的特性,具有速度快、灵活性强和可读性好的特点。Perl语言的产生是为了解决awk语言无法生成报表的问题,...
《Perl语言入门(第四版)》是一本专为初学者设计的教程,旨在帮助读者快速掌握Perl的基础知识和核心概念。第四版的更新可能涵盖了更现代的Perl语法、模块和最佳实践,以适应不断发展的编程环境。 本书将带领读者深入...
根据提供的文件信息,我们可以推断出这是一本关于Perl编程语言的入门书籍——《Perl语言入门_第6版》的下载链接。以下是对该书可能包含的一些重要知识点的概述: ### Perl语言简介 Perl是一种高级、通用且解释型的...