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

[经验分享] perl自学笔记整理

[复制链接]

尚未签到

发表于 2018-8-30 11:07:54 | 显示全部楼层 |阅读模式
  输入与输出
  1、读取标准输入(键盘输入的形式都称标准输入)
  $line = ;                #读取下一行
  chomp($line);                    #截掉最后的换行符
  chomp($line = );    #习惯用法,效果同上
  如果读到文件结尾(end-of-file), "行输入"操作符就会返回undef。这样的设计是为了配合循环使用,可以自然地跳出循环:
  while (defined($line = )) {
  print "I saw $line";
  }
  while () {
  print "I saw $_";
  }
  foreach () {
  print "I saw $_";
  }
  注意: 在while循环和foreach的循环时是不同的,while循环时,perl会读取一行输入,把它存入变量并且执行循环的主体。接下来,它会回头去寻找其他的输入行。但是在foreach循环里,“行输入”操作符会在列表上下文中执行(因为foreach需要逐项处理列表的内容)。为此,在循环能够开始执行之前,它必须先将输入全部读进来。假如输入来自4000M大小的WEB服务器日志文件,他们的差异会十分明显!因此最好的做法,通常是尽量使用while循环的简写,让它每次处理一行。
  2、钻石操作符输入
  perl中有一种读取输入的方法,就是使用 钻石操作符。
  例如:
  [root@localhost aaa]# cat aaa.txt
  aaa
  bbb
  ccc
  [root@localhost aaa]# cat test2.pl
  #!/usr/bin/perl
  #test2
  while () {
  chomp;            #不加参数时,chomp会直接作用在$_上。节约按键,从小地方做起。
  print "I was $_ that I saw!\n";
  }
  [root@localhost aaa]# ./test2.pl aaa.txt
  I was aaa that I saw!
  I was bbb that I saw!
  I was ccc that I saw!
  注意:假如钻石操作符无法打开某个文件并读入内容,便会显示相关的出错诊断信息,就像:
  不能打开wilma:无此文件或目录(can't open wimal: No such file or directory)
  然后钻石操作符会自动跳到下一个文件,就像cat或其他标准工具程序的做法一样。
  3、钻石操作符调用参数
  钻石操作符其实不回去检查调用参数,它的参数其实是来自@ARGV数组,这个数组是perl实现内建起来的特殊数组。
  钻石操作符会查看数组@ARGV以决定该用哪些文件名,如果它找到的是空列表,就会该用标准输入流;否则,就会使用@ARGV里的文件列表。
  例如:
  [root@localhost aaa]#  cat 1.txt
  nihao
  beijing
  [root@localhost aaa]# cat 2.txt
  nihao
  shanghai
  [root@localhost aaa]# cat 3.txt
  nihao
  guangzhou
  [root@localhost aaa]# cat test2.pl
  #!/usr/bin/perl
  #test2
  @ARGV = qw# 1.txt 2.txt 3.txt #;            #强制让钻石操作符读这三个文件。
  while () {
  chomp;
  print "I was $_ that I saw!\n";
  }
  [root@localhost aaa]# perl test2.pl
  I was nihao that I saw!
  I was beijing that I saw!
  I was nihao that I saw!
  I was shanghai that I saw!
  I was nihao that I saw!
  I was guangzhou that I saw!
  4、标准输出
  print ;             #和Unix下的cat类似
  print sort ;        #和Unix下的sort命令功能差不多。
  print (2+3);        #它会打印5。
  5、使用 printf格式化打印输出
  [root@localhost ~]# cat test.pl
  #!/usr/bin/perl
  #test
  $user = zhangsan;
  $days_to_die = 30;
  printf "Hello, %s; your password expires in %d days!\n", $user, $days_to_die;        #%s 指定字符串格式, %d指数字格式
  [root@localhost ~]# perl test.pl
  Hello, zhangsan; your password expires in 30 days!
  [root@localhost ~]# cat test.pl
  #!/usr/bin/perl
  #test
  $user = zhangsan;
  $days_to_die = 30;
  printf "Hello, %s; your password expires in %d days!\n", $user, $days_to_die;
  printf "%g %g %g\n", 5/2, 51/17, 51 ** 17;
  printf "in %d days!\n", 17.85;
  printf "%6d\n", 42;
  printf "%2d\n", 2e3 + 1.95;
  printf "%10s\n", "wilma";
  printf "%-10s\n", "wilma";
  printf "%12f\n", 6 * 7 + 2/3;
  printf "%12.3f\n", 6 * 7 + 2/3;
  printf "%12.0f\n", 6 * 7 + 2/3;
  printf "Monthly interest rate: %.2f%%\n", 5.25/12;
  [root@localhost ~]# perl test.pl
  Hello, zhangsan; your password expires in 30 days!
  2.5 3 1.0683e+29
  in 17 days!
  42
  2001
  wilma
  wilma
  42.666667
  42.667
  43
  Monthly interest rate: 0.44%
  6、文件句柄
  有六种特殊文件句柄是Perl保留的,它们的名字是STDIN、STDOUT、STDERR、DATA、ARGV和ARGVOUT。虽然你可以选择任何喜欢的文件句柄名,但不应使用保留的名字,除非确实需要以特殊方式使用上述六个句柄。
  7、打开文件句柄
  open CONFIG, " open BEDROCK, ">fred";
  open LOG, ">>logfile";
  my $selected_output = "my_output";
  open LOG, "> $selected_output";
  在相对新的Perl(5.6版之后)中,open另有一种使用三个参数的写法:
  open CONFIG, "", $file_name;
  open LOG, ">>", &logfile_name();
  8、关闭文件句柄
  close LOG;
  close CONFIG;
  close BEDROCK;
  9、使用文件句柄
  print LOG "北京欢迎你!\n";
  printf STDERR "%s.\n", aasdf;
  10、改变默认的文件输出句柄
  select BEDROCK;
  print "I hope Mr. Slate doesn't find out about this.\n";
  print "Wilma!n";
  默认情况下,假如你不为print(printf)指定文件句柄, 它的输出就会送到STDOUT。不过你可以使用select操作符来改变默认的文件句柄。
  $I=1,如果你想改回原先的STDOUT,可以用它
  本文来源:http://www.benet.wang/perl%E7%BC%96%E7%A8%8B/89.html";


运维网声明 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-558858-1-1.html 上篇帖子: perl自学笔记整理(三) 下篇帖子: cpanm perl模块自动安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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