#!/usr/bin/perlmy $tmp = "ye_qing";my @name = split("_",$tmp);my $list = "==$name[0]==$name[1]==\n";print $list;my @ye=(1,2,3,4);my @qing=(1,2,@ye,4,5,6);$scount = @qing;print "==sum:$scount==\n";print "==@qing==\n";$count=1;while($count<=@qing){ print("==age:$qing[$count-1]==\n"); $count++;}@sortList = sort(@qing);print "--sort:---@sortList--\n";######### 将去掉键盘输入字符串最后一个字符--换行符号@list=("rabbit","12345","yeqing");chop(@list);print "--@list--$list[0]--$list[1]--$list[2]--\n";######### 将数组和字符串按照::串连起来$string = join("::",@list,"hello world!!!");print "--$string--\n";######## 将字符串按照::分割成数组@arr=split(/::/,$string);print "====@arr====\n";######## hash%h = ('a'=>1,'b'=>'_',c=>'hello');print "hash:--$h{a}--$h{b}--$h{c}--\n";##### 删除hash中一个元素delete $h{b};print "hash:--$h{a}--$h{b}--$h{c}--\n";######清空hashundef %h;print "hash:--$h{a}--$h{b}--$h{c}--\n";#####获取hash中所有key%h = ('a'=>1,'b'=>'_',c=>'hello');@all_key = keys %h;print "==@all_key==\n";#####hash排序#所有键值,是按hash的值从大往小排列的。值的比较是数字比较(比如说,10>9)@all_keys = sort{$h{$b}<=>$h{$a}} (keys %h);# 所有键值,是按hash的值从小往大排列的。值的比较是数字比较@all_keys = sort{$h{$a}<=>$h{$b}} (keys %h);# 所有键值,是按hash的值从小往大排列的。值的比较是字符串比较(比如说,'10' < '9')@all_keys = sort{$h{$a} cmp $h{$b}} (keys %h);#判断hash是否包含keyexists($h{$key});#########输出hash存储了多少数据print scalar keys %h, "\n"; #遍历一个hashwhile (my ($k, $v) = each %h) {print "$k ---> $v\n";}#### while循环使用# last是跳出现在所在的循环,next则是跳过下面的指令直接执行下一次的循环。while(chomp($i=100100100100100100100100100100)) { next if ($i == 5); last unless ($i > 10);}################# 举例# 求一组数的和并打印。my $s1 = &sumvar(11,22,33);my $s2 = &sumarg(22,33,44);my $s3 = &sumgod(11,22,33,44,55);print "s1=$s1, s2=$s2, s3=$s3\n";# 办法1sub sumvar { # 将参数数组的前三个元素值相应地赋给($first, $second, $third) (my $first, my $second, my $third) = @_; # 返回其和值。缺点: 如果是求四个参数的和,依然只能给出前三个的和。 return $first + $second + $third;}# 办法2sub sumarg { #$_[0] 表示参数数组@_的第一个元素。其余类推。 my $first = $_[0]; my $second = $_[1]; my $third = $_[2]; #返回其和值。缺点: 同sumvar. 只是通过这里学习 $_[0] 这种用法。 return $first + $second + $third;}# 办法3, 参数可以任意多。都能求其和。sub sumgod{ my $s = shift @_; foreach ( @_ ) { $s = $s + $_; } #同前面函数max。 return $s;}#################### 总结数据操作* $ - 声明与引用用一个scalar的变量* @ - 声明与引用一个list,但是当访问一个list的成员时,需使用$ListName[index]* % - 声明与引用一个hash表,但是当访问一个hash的成员时,需要使用$HashName{key}特殊变量* $0 - 当前运行脚本的文件名* @ARGV - 当前运行脚本的命令行参数列表* $_ - 默认变量,如循环中的当前变量* @_ - 函数的输入参数列表* %ENV - 系统的环境变量* @INC - Perl的Include路径列表,我们可以往该列表中添加我们自己的目录来方便引用自定义的库* $! - 当前系统提示,错误信息* $^O - 操作系统的名字* STDIN,STDOUT,STDERR - 输入输出的默认句柄,可以作一定的自定义* => - 声明一个hash时可以用来明确的表示出key=>value的对应关系* $^I- 指定备份的文件的后缀名,如此,被修改的文件将会自动以该后缀名保存一个副本特殊用法* &Sub - 调用一个函数,虽然Perl有些规则让你在某些时候可以省略这里的&符号,但是处于一致性考虑,所以自定义的函数的调用,我一律采用此种方式。* $# - 用来取得模个数组的最大index, 一般情况下,也可以用-1来表示最后一个元素的index的* qw() - 快速声明一个字符串数组,可以省略那些烦人的引号正则表达式* $ - 获取被括号捕获的匹配* $`, $&, $' - 获取匹配的字符串,以及其前后两个部分* ^,$ - 字符串的始末位置,用作定位常用函数* pop, push, shift, unshift, reverse - list的操作函数* keys,values, exists, each, delete - hash的操作函数* chomp, split, join, index, substr, sort - 字符串操作函数* sprintf,printf, print - 格式化输出函数* system, exec, `` - 系统命令调用函数* glob, unlink, mkdir, rmdir, rename,chmod,chown, open, close, opendir,closedir - 文件系统操作函数* stat, lstat,localtime,gmtime,utime - 文档属性,时间相关函数* hex, oct - 二进制,八进制,十六进制数转化成十进制的函数* grep, map - list高级操作函数#这些函数的详细介绍,都可以通过命令:#perldoc -f functionname#查到常用库* File::Basename - 根据path获取文件名或者文件路径* File::Spec - 根据文件名与路径组合成全路经* File::Find - 递归遍历某个目录下所有文件* XML::Simple - 以一个复杂的结构来表示xml文件,使用起来相当方便* Time::HiRes - 经常用来计算一个操作所耗费的时间* Getopt::Long - 当脚本需要复杂的输入参数与选项时用到* Cwd - 拿到当前工作目录* IO::File - 文件操作
本文转自cloves 51CTO博客,原文链接:http://blog.51cto.com/yeqing/1678245