perl编程的一些笔记

由于工作需要,需要用perl编写一些程序,所以花了一个下午看了一下perl,基本perl编程
已经可以了,做了一些笔记。

1. 由返回的文本行也包含用户键入的换行符(因为按下了Enter键)。在
大多数情况下,你不希望在字符串的结尾处出现换行符。若要删除换行符,可以像下面这样
使用chomp运算符.

2. 关于字符串和数字的说明
(1) 如果某个元素看上去是个数字,那么Perl在需要数字时可以将它用作数字;
(2) 如果某个元素看上去是个数字,那么当Perl需要一个字符串时,它可以使用数字的字符
串表示法(使用.链接起来)


3. 流程
条件:
if (exp) {
} elsif (exp) {
} else {
}

unless(exp) {
#exp为假时执行
}

数字关系运算符: ==, >, <, >=, <=, !=
字母: eq, gt, lt, ge, le, ne

规则:
数字0为假
空的字符串("")和字符串"0"为假
未定义值undef为假
其他东西均为真

逻辑运算符: &&(and), ||(or), !(not)

循环:
while(exp) {
}

for(init; test; icrement) {
}

注意:

if (test_expression) {
expression;
}
等效为: expression if (test_expression)

循环控制:
last-->等效于break;
next-->等效于continue;

4. 数组
@后跟一个有效变量名表示数组;
(1) qw(xx xxx)-->包含字符串
(2) 范围运算符( 1 . . 1 0 )产生1-10(包括1-10)之间的所有的数的列表
(3) $数组名[下标]的方式访问数组元素
(4) $#arrayname获得数组的最后一个元素的下标; $size=@array得到数组的元素
(5) 遍历数组:
for ($index=0; $index<@array; $index++) {
..$array[$index]...
}

foreach $elem (@array) {
do with $elem
}

得到的元素都是引用.

while() {
($firstchar)=split(//, $_);
print "$firstchar\n";
}
$_这里是读取到的当前行


split是分割; join是合并

排序: 默认是ASCII排序, 可以自定义排序顺序
@sorted=sort {
return (1) if ($a > $b);
return (0) if ($a == $b);
return (-1) if ($a < $b);
} @numbers;


5. 文件
(1) 打开和关闭
open(filehandle, filepath) || die--->执行成功, 则打开文件; 执行失败, 则执行die信息
close(filehanle) 关闭句柄
(2) 读取文件
方式一:
while(defined($a=) {
print $a;
}
方式二:
如果尖括号运算符是while循环的条件表达式中的唯一元素,那么perl将自动把输入行赋予该
特殊变量$ ,并重复运行该循环,直到输入耗尽为止
while() {
print $_;
}

(3) 写入文件
open(filehandle, ">filepath")
open(filehandle, ">>filepath")

print filehandle data


6. 模式匹配
匹配:m/;/ (还可以简写为 /;/ ,略去 m)
替换:s/;/;/
转化:tr/;/;/

这三种形式一般都和 =~ 或 !~ 搭配使用(其中 "=~" 表示相匹配,在整条语句中读作 does,"!~" 表示不匹配,在整条语句中读作 doesn't),
并在左侧有待处理的标量变量。如果没有该变量和 =~ !~ 操作符,则默认为处理 $_ 变量中的内容。举例如下:
$str = "I love Perl";

$str =~ m/Perl/; # 表示如果在 $str 中发现 "Perl" 字符串,则返回 "1" 否则返回 "0"。

$str =~ s/Perl/BASH/; # 表示将变量 $str 中的 "Perl" 字符串替换为 "BASH",如果发生此替换则返回 "1",否则返回 "0"。

$str !~ tr/A-Z/a-z/; # 表示将变量 $str 中的所有大写字母转化为小写字母,如果转化发生了则返回 "0",否则返回 "1"。


7. 哈希结构
$map{'key'}='test';

(1) 列表初始化map
成对的当作key-value
(2) 使用=> 初始化
%food=('apple' => 'fruit', 'pear' => 'fruit');
(3) 遍历key
foreach $key (keys %map) {
print "$key"
}

@valueslist = values %map;
@keylist = keys %map;

(4) 检查是否包含某个关键字,不是关键字的值:
if (exists $Hash{keyval} {
}

(5) 删除关键字:
delete $Hash{keyval}

8. 函数
使用@_表示参数
$_[下标]取参数


eclipse的插件支持:
http://e-p-i-c.sf.net/updates


Perl里面的map, 是一种道具,可以让你的函数或者表达式,很方便地施用到一系列对象上去。
1. 让我们先看map的语法
map BLOCK LIST
map EXPR, LIST
BLOCK是一个用{}包围的代码块。EXPR可以是子函数名、正则表达式等。LIST是输入列表。
简单地说,map就是起了一个替代foreach循环的作用,map会把数组LIST中的元素挨个取出,放到系统变量$_中,然后调用BLOCK去 处理。值得强调的是,除非有很特殊的理由,不要去修改$_的值,因为修改$_就是直接改了原始数组里的元素!BLOCK 处理过的结果由map返回,仍然是一个数组。
2. 一个例子:计算一系列文件大小
my @sizes = map { -s $_ } @filenames;
上面例子用-s操作取得一些文件的大小,存到数组中去。
3. 是不是说map函数的输入数组和输出数组一定等长呢?不一定的,看这个
my @books = ( 'Pride and Prejudice', 'Emma', 'Masfield Park', 'Sense and Sensibility', 'Nothanger Abbey', 'Persuasion', 'Lady Susan', 'Sanditon', 'The Watsons');
现在取出书名里面所有用到的单词,并且全部转换成大写
my @words = map { split( //s+/, $_)} @books;
my @uppercases = map uc, @words;
在split起过作用之后,当然@words的长度要比@books长了。
split的用法:http://perldoc.perl.org/functions/split.html

你可能感兴趣的:(perl)