1. 第一个程序:正则表达式
#!/usr/bin/perl数组
print "hello world.\n";函数
2. 第二个程序scala
#!/usr/bin/perl对象
use 5.010; #告诉perl要使用5.010版本的新特性排序
say "hello world."; #与print效果同样,只是不须要“\n”便可换行索引
3. 使用变量前不须要定义rem
4. 第三个程序字符串
#!/usr/bin/perl
#
@lines = `perldoc -u -f atan2`; #用倒引号调用外部程序,输出的结果会一行行地存储在@lines这个数组变量中。
foreach (@lines) {
s/\w<([^>]+)>/\U$1/g;
print;
}string
5. 在 Perl 中,无论是数字仍是字符串都用标量(scalar)来存储,一个标量变量以 $ 开头。Perl是经过操做符来识别变量是数字仍是字符串。
6. 字符串操做
6.1 "aaa"."bbb"
6.2 "aaa" x 4 #aaa重复4次
7. 标量变量
以$开头
8. 比较操做符
比较 数字 字符串
相等 == eq
不等 != ne
小于 < lt
大于 > gt
小于或等于 <= le
大于或等于 >= ge
9. if语句
if () {
} else {
} #必定要有{},哪怕只有一个语句
10. 获取用户输入
$text = <STDIN> #获取用户输入
chomp($text) 或 chomp $text #去掉"\n"
11. while 语句
$count = 0;
while ($count < 10) {
$count += 2;
print "$count\n";
}
12. undef值
如查一个变量没有被赋值,那么它的值是undef,表示什么也没有。
$line = <STDIN>;
if (defined($line) ) #若是$line是undef,返回假 {
print "$line\n"
}
13. 列表与数组
列表是指标量的有序集合,数组是存储列表的变量。
13.1 访问数组
$array[0] = 0;
$#array 比数组大小小1,由于数组下标是从0开始。
$array[-1] 表示最后一个元素
13.2 列表直接量
(1,2,3)
(1..5)与 (1,2,3,4,5)等价
(1, “abc”)列表中能够有任何标量值
13.3 qw简写
qouted word 这种写法能够减小引号与逗号输入次数。
qw( abc def ghi)
13.4 pop 和 push 操做
@array = 5..9; #定义数组(5,6,7,8,9)
$fred = pop(@array); #fred等于9 array变成(5,6,7,8)
push(@array, 0);==》push @array, 0; #向数组添加一个数
push @array, 1..10; #向数组添加一个数组
@others = qw(1 2 3);
push @array, @others;
13.5 shift 和 unshift
pop与push处理的数组尾部,而shift与unshift处理的数组开头。
13.6 splice 操做符
其最多能够有4个参数,其使用方法以下:
示例1 :
@array = qw (1 2 3 4);
@removed = splice @array, 2;#array 等于(1,2),removed等于(3,4)。
示例2 :
@array = qw (1 2 3 4);
@removed = splice @array, 2, 1; #array equals (1 2 4), remove equals (3).
示例3 :不仅删除,还能够添加,若是第三个参数为0,则只添加不删除。
@array = qw (1 2 3 4);
@removed = splice @array,2,1,@array1;
13.7 foreach控制结构
$_变量
foreach (1..10) {
say $_;
}
13.8 reverse操做符
reverse @array; #反转array数组。
13.9 chomp
13.10 sort操做符能够对数组进行排序
13.11 each 操做符
返回数组的值与索引。
while ( my($index, $value) = each @array ) {
say "$index: $value";
}
13.12 $#array,表示数组的大小。
13.13 去掉一行行首与行尾的空格 :
my $str = " xyj";
$str =~ s/^\s+|\s+$//g;
print $str;
print "\n" ;
或
先去掉前面的: $a=~s/^ +//;
在去掉后面的: $a=~s/ +$//;
14 子程序
14.1 定义子程序
sub marine {
}
14.2 调用子程序
&marine;
14.3 返回值
最后一次的运算结果会被看成子程序的返回值。
14.4 子程序的参数
@_ 是一个数组,@_[0]表示第一个参数。
14.5 子程序的私有变量
perl脚本里,全部的变量都是全局的,但能够my($m, $n)定义私有变量。
一般会这样用:my($m,$n) = @_
14.6 变长参数列表
if (@_ != 2) 能够判断参数的长度。
14.7 return操做符
若是子程序执行到一半想退出,那么就能够用return,return后面能够有返回值。
14.8 子程序的调用方式
&chomp; 或 chomp(1,2);
15 输入输出
15.1 <STDIN>
15.2 钻石操做符
while (<>) {
chomp;
print "$_\n";
} 这段代码能够打开以文件名做为脚本参数的文件,并打印每一行。
15.3 脚本是如何获取参数的
@ARGV
foreach (@ARGV) {
print "$_\n"
}
15.4 输出到标准输出
print <> 至关于cat命令
print sort <> 至关于sort命令
15.5 格式化输出
printf
15.6 文件句柄
open CONFIG, 'dino';
open CONFIG, '<dino';
open CONFIG, '>dino';
open CONFIG, '>>dino';
打开文件句柄后,就能够像STDIN同样使用了。
print CONFIG "out put.\n";
关闭文件句柄 close CONFIG
15.7 die操做符
if ( ! open LOG, '>>', 'logfile' ) {
die "cannot create logfile: $!"
$!表示错误码。
die 会终止程序的运行,而且会把程序名和行号附加在错误信息的后面。
15.8 autodie
use autodie;
本身没必要写die语句,若是有致命错误发生,脚本会自动调用die。
15.9 改变默认的文件输出句柄
select 句柄 #但记得以后恢复默认句柄
if ( ! open LOG, '>>', 'logfile' ) {
die "cannot create logfile: $!";
}
while ( <LOG> ) {
}
或
select LOG;#会改变默认句柄。
$| = 1 #至关于作了sync操做。
或 print 句柄 “abc”
15.10 句柄能够存在标量中
open $jubing , 文件
16. 哈希
16.1 访问哈希元素
$hash{$key}
16.2 赋值
my %hash = {
abc => "123",
def => "456",
};
16.3 哈希函数
16.3.1 kes 和 values
my %hash = ('a' => 1, 'b'=>2, 'c'=>3);
my @k = keys %hash;
my @v = values %hash;
注:在标量上下文中,这两个函数返回键值对的个数,$k = keys %hash
16.3.1 each函数
while ( ($key, $value) = each %hash ) {
say "$key => $value";
}
16.3.2 exists函数
查看某个键对应的值是否存在。
if (exists $books{"key"}) {
}
16.3.4 delete函数
删除hash中key对应的值。
17 正则表达式
17.1 在perl语言中使用正则表达式
m 定界符 正是表达式 定界符 如: m(a*b)<=> /a*b/
注:定界符不惟一。
17.2 大小写无关匹配
chomp($_ = <STDIN>);
if (/yes/i) {
}
17.3 匹配任意字符
默认状况下点号没法匹配换行符,/patten/s,便可匹配任意字符。
17.4 用/x加入空白符
/patten/x #其中patten能够有空格
这样就能够写出如上面的匹配形式,若是真的想要匹配空符的时候,能够用转意(\t或\s)。
17.5 锚位
绝对开头 /Ahttp:*/
绝对结尾/.png/z
17.6 整词匹配
/\babcdefg\b/
17.7 绑定操做符 =~
默认状况下模式匹配的操做对象是$_
$some_other =~ /patten/s;
17.8 模式中的内插
也就是patten能够为一个变量。
my $what = "pattern";
if (/\A($what)/) { # 模式的锚位被定在字符串的开头。
}
17.9 示例
$_ = "Hello there, neighbor";
if (/\s(\[a-zA-Z],/) {
print "the word was $1\n";
}
$1表示匹配到的结果。这里$1等于“hello,”,不包括空格,也不包括逗号,且只匹配一个,即便后面还有能够匹配的单词也不会再匹配。
$_ = "Hello there, neighbor";
if (/(\S+) (\S+), (\S+)/) {
print "$1 $2 $3\n";
}
这个例子能够匹配三个单词。
其实$1 $2 $3变量对应的是圆括号内的匹配模式。默认状况下圆括号内的匹配结果都是要存在$1这样的变量中的,但能够禁止:(?:pattern)
但$1这种形式很差记,还能够将匹配结果放进哈希表内。
my $names = 'Fred or Barney';
if ( $names =~ m/(?<name1>\w+) (?:and|or) (?<name2>\w+ ) {
say "I saw $+{name1} and $+{name2}";
}
17.10 split操做符
my @fields = split /separator/, $string;
my @fields = split; #它会省略开头的空字段,并以空字段分隔字符串。
17.11 join函数
my $x = join ":", 4, 6, 8, 10;
18 last操做符 与c语言中的 break等价
19 next操做符与c语言中的continue等价
20 redo操做符,回到循环的顶端
21 条件操做符
expresion ? == : ==;
22 逻辑操做符
与&& 或|| 非