设为首页 收藏本站
查看: 1629|回复: 0

[经验分享] perl脚本基础总结

[复制链接]

尚未签到

发表于 2015-12-26 14:12:50 | 显示全部楼层 |阅读模式
  1.  单引号字符串中的\n不会被当做换行符处理。 如:'\'\\'  -->  '\  。
  2.  双引号
  字符串联    "Hello"."World"."\n"  -->  HelloWrold 换行;
  字符串重复操作   "fred"×3  --> "fredfredfred";
  大小写       "\l","\L"  -->  小写 ; "\u","\U" --> 大写 ; "\E" 结束。
  3.  字符串运算
  ==     eq       相等
  !=      ne       不等
  <       lt         小于
  >       gt        大于
  <=      le        小于或等于
  >=      ge       大于或等于
  4.  用户输入      <STDIN>
  5.  chomp函数:去掉文本的"\n"换行符。读写文件时,要去掉换行符。 如:chomp($text<STDIN>);
  6.  单行注释:#  ;   多行注释以 "=pod"开始,"=cut" 结束。
  7.  undef: 没有值时,表现为0或空字符串。
  8.  defined函数: 为undef时,返回false,其余返回true。
  9.  x 输出遍数。如:print "love" x 3 -->lovelovelove.
  10.  特殊数组索引:"$#rocks" ,最后一个元素索引。
  11.  qw简写,代替 "" 功能。 如:qw(freds bany wilad dino);
  12.  @rocks=qw /break slasle labv/;  #给数组赋值。
  @copy=@qwarry; #将一个数组拷贝到另一个数组里。
  13.  pop:末尾取出元素;push:将一个或一列元素加在末尾。
  如:pop(@array);  push(@array,@others);  #将@others添加到@array末尾。
  14.  shift 和 unshift 对数组首操作。 shift:取出首元素。unshift:将一个或一列加在首部。
  15.  当把email地址插入双引号时,$email="fred\@bedrock.edu";  $email='fred@bedrock.edu';
  16.  perl最常用的默认变量:$_  。 如:  foreach(1..10){
  print "I can $_!\n";
  }         
  17.  foreach控制结构
  如:  foreach $rock(qw/break Slee lawer/){
  print "One rock is $rock . \n"; #打印数组
  }
  18.  reverse 逆转操作,将一串列表按相反的顺序返回。
  如: @fred=6..10;
  @bareny=reverse(@fred); #@bareny="10,9,8,7,6".
  19.  sort:将输入的一串列表根据内部的字符顺序进行排序。
  如:ASCII字符串     @rocks =qw/breaks sholer rubble gertdned/;
  @sorted=sort(@rocks);
  20.  强制转换成标量,context,可使用 scalar。
  如:print "I have",scalar @rocks,"rocks!\n";输出为数字。
  21.  <STDIN>在列表context中:  chomp(@line=<STDIN>);  #读入所有行,不包括换行符。
  文件输入完成时:linux/MACOS x,用 ctrl+d 结束;DOS/Windows, 用 ctrl+z 结束。
  22.  调用子程序时,返回值为最后一个被计算的表达式。 @_ 是子程序的一个私有变量。      可以使用“my”创建子程序的私有变量,也可以在if ,untile ,foreach 块中使用。
  如: my($fred,$bread); #定义两个私有变量。
  如果新的私有变量没有被赋值的话,标量变量 会自动赋值为 undef ;数组变量 赋值为 空列表。
  23.  使用strict Pragma 严格检查某代码;use strict 迫使采用更严格的检测。
  24. 调用子程序 & 可省。
  如: sub divsion{
  $_[0]/$_[1];
  }
  my $quotient=divsion 355, 113;  #调用,同 my $quotient=&divsion(355,113);
  25.  严重错误和 die 函数
  如: if(!open LOG,">>logfile"){
  die "Cannot create logfile:$_!";  #$_ 输出系统错误信息
  }
  一般,0表示正常;非0表示失败。常见的:1-->命令行中语法错误; 2--> 运行错误  ; 3--> 没有找到匹配文件。
  26.  @ARGV  含义是包含了程序从命令行得到的所有参数。输入。
  27.   复制文件: system('cp -r ./filea.txt ./map'); #将文件.txt复制到map文件夹下
  29.   读文件:  open(FILE,"file.txt");  # FILE 为文件句柄。
  my $record;
  while($record=<FILE>){
  print ("file record is :$record\n");
  }
  close(FILE);
  30.  写文件:open(FILE1,">write.txt");
  syswrite(FILE1,"I konw it ! \n");  #将 "I konw it!"写入文件。
  close(FILE1);
  注:> 覆盖写入;>> 追加写入。
  31.  创建文件夹:mkdir(hello,0777)||die "not create!\n";
  创建文件: unless(-e "name.txt"){
  open(FILE2,">name.txt") or &out_err("not create!\n");
  }
  删除文件:unlink("name.txt");
  创建目录(可多级):mkpath(directoy,1,0711);       删除目录:rmtree(directoy,1,1);
  删除文件夹:rmdir("hello")||die "not delete";
  32.  数据库:windows下安装DBD:->cmd 输入 ppm install DBD::mysql
  33.数据库连接: use DBI;
  my $dbh=DBI->connect("DBI:mysql:database=数据库;host=localhost;port:3308","用户名","密码",{'RaiseError'=>1});
  my $sth=$dbh->prepare("select * from asset");
  $sth->execute();
  while(my $ref=$sth->fetchrow_hashref()){
  print "$ref->{'id'}\t".
  "$ref->{'name'}\n";
  }
  $sth->finish();
  $dbh->disconnect();
  34.哈希:my %last_name=(
  "fred"=>"finished",
  "dion"=>"undef",
  "barney"=>"rubble"  
  );
  35.  keys 和values 函数
  my %hash=("a"=>1,"b"=>2,"c"=>3);
  my @k=keys %hash;   #得到key值
  my @v=values %hash;  #得到values值
  注: @k和@v中的"a","b","c" 的顺序可能不同,但是@k和@v还是一一对应的。如"b"=>2,可能在第三位。
  36.  each函数:迭代hash中的每个元素。
  如:while(($key,$values)=each %hash){
  print "$key=>$values\n";
  }
  37.  exists 函数:  if(exists $books{$dino}){ };
  delete函数: delete $books{$dino}; #删除
  38.  大小写转换: $_="I saw Barney with Fred.";
  大写:S/(fred)|barney/\U$1/gi;  #BARNEY
  小写:S/(fred)|barney/\L$1/gi;  #barney
  39.split操作:分割      @fields =split /separtor/,$string;
  如: @fileds=split/:/,"abc:def:d:h";
  join粘合函数: my $result = join $glue,@pieces;
  如:my $x=join ":",4,5,6,7,8;    # 4:5:6:7:8
  40. 控制条件 unless 除非条件为真,否则执行块中代码。
  unless($fred=~/^[A-Z-]\W*$/i){
  print "The $fred";
  }
  until:与while相反,当条件为假时,重复执行。
  41. $n=++$m; #先将变量加1,再取值;
  $n=$m++;#先取值,在加1.
  42.  last会立刻结束循环。 for,foreach,while,until,裸块。
  next 跳到当前循环的最后面,next之后进入下一轮循环。
  redo 调到当前循环的顶端,不进行条件表达式判断以及接着本次循环(可放到循环体后面)。
  标签块: LINE:while(<>){
  foreach(split){
  last LINE if/__END__/;
  }
  }
  43.  三元操作符:Express?if_true_exp : if_false_exp
  44.  localtime函数:时间转换
  如:my $timestemp=1180630098;
  my  $date=localtime $timestemp;
  格式:my($sec,$min,$hour,$day,$mon,$year,$wdy,$yday,$isdst)=localtime $timestemp;
  my $now=gmtime;    #得到当前时间
  45.   chdir 改变工作目录。 如:chdir "/etc" or die "cannot chdir to /etc:$! ";
  globbing:shell将每一个命令行中的任何的文件名模式转换成它所匹配的文件名。
  如: my @all_files=glob "*";
  my @pm_files=glob "*.pm";
  my  @all_files=<*>;
  46.   目录句柄:打开:opendir     读入:readdir        关闭:closedir     (用法与打开文件相似)
  重命名: rename "old","new";
  改变文件或目录权限:chomd  。 如:chomd 0075,"fred","bamey";
  chown :改变一批文件的所有者及所在的组。
  如: defined(my $user=getpwnam "merlyn");  #getpwnam将名字转化为数字
  defined(my $group=getgrnam "users");   #getgrnam将组名转化为数字
  chown $user,$group,glob "/home/merlyn/*";   #返回文件个数
  readlink:符号连接指向的地方。    如: my $perl =readlink "/usr/local/bin/perl";
  47.   使用索引寻找字符串:index
  $where =index($big,$small);  #从0开始编号
  rindex: 某个字符串最后出现的位置。
  substr: $part = substr($string,$inintial_position,$length);   #inintial_position:从0开始的编号的初始位置。length:字符串长度。string:父串
  如: my $mineral=substr("Fred J.Flintstone",8,5);  #得到"Flint"
  替换: substr("hello ,world",0,5)="GoodBye";  #GoodBye,world
  48.  sprintf 格式化数据,返回值为被请求字符串,而非打印。
  如:my $money=sprintf "%.2f",2.49997;  #2.5049.  eval 捕捉错误,放在$@中。
  49.  使用grep在列表得到元素。
  如:my @odd_number=grep{$_%2} 1..1000;
  50. perl 目前遇到的安装模块:main::tail
  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-156615-1-1.html 上篇帖子: Perl分割字符串的一个精妙的写法 下篇帖子: vim之perl-support的小修改
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表