perl学习笔记

简介:
#!/usr/bin/perl
my $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";
######清空hash
undef %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是否包含key
exists($h{$key});
#########输出hash存储了多少数据
print scalar keys %h, "\n"; 

#遍历一个hash
while (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";

# 办法1
sub sumvar {
  # 将参数数组的前三个元素值相应地赋给($first, $second, $third)
  (my $first, my $second, my $third) = @_;
  # 返回其和值。缺点: 如果是求四个参数的和,依然只能给出前三个的和。
  return $first + $second + $third;
}

# 办法2
sub 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


相关文章
|
2月前
|
IDE Unix Linux
|
2月前
|
Unix Linux iOS开发
|
数据库 索引 Perl
|
Perl 自然语言处理