perl语言入门学习笔记

37305阅读 0评论2012-10-12 飞鸿无痕
分类:LINUX

好久没写perl脚本了,基本忘得差不多了,呵呵,重新看一下perl语言入门吧。

perl内部并不存在整数,在perl内部总是按照双精度浮点数的要求来保存数字并进行运算的。

如果要使perl支持unicode字符,需要添加 use utf8;

\l  将下一个字母转换为小写
\L  将它后面的所有字母都换为小写,直到\E为止
\u  将下一个字母转换为大写
\U  将它后面的所有字母都换为大写,直到\E为止
\Q  相当于把它到\E之间的非单词字符加上反斜杠
\E  结束\L、\U、\Q开始的作用范围



per的告警信息:
use warnings;
或者使用 perl -w运行脚本
或者加上 #!/usr/bin/perl -w
如果看不懂告警,就是用
use diagnostics;
打印更详细的信息


$#aaa表示aaa数组的最后一个元素的索引值



关于perl中布尔值的判断
1、如果是数字,0为假;所有其他的为真
2、如果是字符串,空字符串为假,所有其他的字符串为真
3、如果既不是数字也不是字符串,那就先换成数字或者字符串再进行判断。



使用defined函数来判断变量是否定义



数组定义:
my @p1=('aaa','bbb','ccc');
my @p2=(1..100);
my @p3=qw(aaa bbb ccc);
my @p4=qw! aaa bbb ccc !;
$end=$#p1;
$number=$#p1+1;
$last=$p1[$#p1];
$last=$p1[-1];

pop取出数组中的最后的一个元素并将其作为返回值返回。
$last=pop(@p1);
push添加元素到数组的最后
push(@p1,'jaj');
push @p1,'aaaa';
push @p1,@p2;
shift取出数字第一个元素并将其作为返回值返回
$first=shift(@p1);
unshift添加元素到数组的最左边
unshift(@p1,'jaj');
unshift @p1,@p2;
splice可以实现从中间操作数组;


foreach 来循环遍历数组中的值
reverse反转数组
sort 对数组进行排序
sort(@p1) 正向排序
reverse sort(@p1) 逆向排序

chomp(@p1);
chomp(@line =);

可以使用state操作符来声明持久性私有变量
state $sum=0;
state @numbers;

打印数组:
print @array
print "@array"


@ARGV是存放所有参数的数组


<>砖石操作符,把输入参数当作文件处理



文件操作符(文件句柄)
open CONFIG, 'test';
open CONFIG, 'open CONFIG, '>test';
open CONFIG, '>>test';
关闭文件句柄:
close CONFIG;
读取或者写入的时候指定文件的字符编码
open CONFIG, '<:encoding(UTF-8)', 'test';
open CONFIG, '>>:encoding(UTF-8)', 'test';
打印perl能处理的字符编码清单
perl -MEncode -le "print for Encode->encodings(':all')"

判断文件句柄是否成功的代码:
my $success=open CONFIG, '>>', test';
if( !$success ){
    print "create file faild";
}

if( ! open CONFIG, '>>', 'test' ){
    die "Can't create config file: $!";
}

if( @ARGV<2 ){
    die "Not enough arguments\n";
}
自动检查致命错误
use autodie;

可以将文件句柄设置成变量,这样文件句柄可以作为子程序的参数传递,或者放在数组和hash中排序,或者严格控制其作用域。
打印往文件句柄中写入数据的时候不需要加入逗号!



hash
申明hash
my %test=('foo'=>35,'bar'=>39,'carl'=>34,'zhang'=>89);
my %test=('foo',35,'bar',39,'carl',34,'zhang',89);
访问哈希元素
$hash{$key};
哈希元素赋值
$hash{'test'}='carlzhang';
访问整个hash
my @any_array=%array;
print "@any_array\n";
hash转换
my %test_hash=reverse %hash;
hash函数
keys函数能返回hash的所有键列表
values函数能返回hash所有的值列表
my %test=('foo'=>35,'bar'=>39,'carl'=>34,'zhang'=>89);
my @test_key=keys%test;
my @test_value=values%test;
print "test_key is: @test_key\n";
print "test_value is: @test_value\n";
使用each函数遍历hash
my %test=('foo'=>35,'bar'=>39,'carl'=>34,'zhang'=>89);
while( my($test_key,$test_value)=each %test){
        print "$test_key=>$test_value\n";
}

my %test=('foo'=>35,'bar'=>39,'carl'=>34,'zhang'=>89);
foreach my $test_key (sort keys %test){
        my $test_value=$test{$test_key};
        print "$test_key=>$test_value\n";
}
判断键值是否存在:
if ( exists $test{'foo'}){
        print "key fool is in test hash\n";
}
删除hash中的某个元素
delete $test{'foo'};
%ENV环境变量
my @test=%ENV;
foreach $test_key (keys %ENV){
        print "$test_key=>$ENV{$test_key}\n";
}



模式匹配:
m/string/;
m%string%;
/string/;
使用/i忽略带小写
/string/i
用/s匹配任意字符
/test.*aaa/s 会匹配test和aaa之间的所有内容,包括换行符
用/x加入空白符,有了/x,perl会忽略空格和正则表达式中的perl风格的注释。
\A表示字符串开头
\z表示要匹配的字符串绝对末尾
\b匹配单词边界
\B不匹配单词边界
捕获
使用?:来指定不捕获小括号内的东东
使用?
上一篇:统计当前日期距离月底有多少工作日的函数
下一篇:关于perl中中文乱码的解决办法