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

[经验分享] Perl Learning - 9 (printf, filehandle, open, close)

[复制链接]

尚未签到

发表于 2018-8-31 09:50:19 | 显示全部楼层 |阅读模式
printf is powerer to control the outputs, it's used with a format string, and a list of elements. printf "Hello, $s; your password expires in %d days!\n", $user, $days_to_die;  printf "in %d days!\n", 17.85; # in 17 days!
Format string has some kind of 'conversion', each format string starts with '%' and ends with a character.  The number of elements and format strings must be the same, otherwise printf doesn't work.
%d gets integer number, like %d ... 17.85 is 17.  %s gets characters, -15 means align by left.
  %f gets fload number.
printf "%6d\n",42;  printf "%2d\n",2e3+1.95;
  printf "%15s\n","wilma";
  printf "%-15s\n", "flintstone";
printf "%12f\n",6*7+2/3;  printf "%12.3f\n",6*7+2/3;
  printf "%12.0f\n", 6*7+2/3;
$ ./printf.pl  Hello, Larry; your password expires in 5 days!
  in 17 days!
  42
  2001
  wilma
  flintstone
  42.666667
  42.667
  43
If you want output a '%', use '%%', '\%' don't work.printf "Monthly interest rate: %.2f%%\n", 5.25/12; # Monthly interest rate: 0.44% Filehandle is the name of I/O connection in Perl program, is the bridge between perl and outside world.  It's name of connection, but not name of file.
Perl has six buildin filehandle: STDIN, STDOUT, STDERR, DATA, ARGV, ARGVOUT  STDIN=standard input
  STDOUT=standard output
  STDERR=standard error
If you need other filehandles, use operater 'open'.open CONFIG, "dino"; # input from dino  open CONFIG, "fred"; # output to fred, cover the original contents of fred
  open LOG, ">>logile"; # append to fred
The upper-case are filehandles, the lower-case are filenames.  When opening a filehandle, the default action is get input from file, so the first two has same results.
We can use expressions with filenames. my $selected_output="my_output";  open LOG, "> $selected_output"; # note the space after '>'
Use 'close' to close a filehandle.  close BEDROCK;
if(!open LOG, ">>logfile"){  die "Cannot create logfile:$!";
  }
  'die' will end program when 'open' fails, and tell you it cannot open logfile.
  $! is the system error messages that shell throws out.
$ ./die_open.pl  Cannot create logfile:Permission denied at ./die_open.pl line 4.
If you don't want the program name, just put a "\n" at the end.$ cat die_open.pl  #!/usr/bin/perl
if(!open LOG, ">>logfile"){  die "Cannot create logfile:$!\n";
  }
  $ ./die_open.pl
  Cannot create logfile:Permission denied
After a filehandler opens, it can be used as STDIN to get input lines. if(!open PASSWD, "/etc/passwd"){  die "How did you get logged in?($!)";
  }
  while(){
  chomp;
  print "$_\n";
  }
  $ ./die_open.pl
  root:x:0:0:RHEL5:/root:/bin/bash
  bin:x:1:1:bin:/bin:/sbin/nologin
  daemon:x:2:2:daemon:/sbin:/sbin/nologin
  adm:x:3:4:adm:/var/adm:/sbin/nologin
  ......
  Exercises:
  1. Write a program, print the reversed lines from input.
  #!/usr/bin/perl
  while(){
  push @lines,$_;
  }
  @lines=reverse @lines;
  foreach(@lines){
  print $_;
  }
  ###########################################
  2. Write a program, user input lines of characters, then print the formatted lines that right align by 20 bits.
  #!/usr/bin/perl
  print "1234567890" x 7 . "\n";
  while(){
  chomp;
  printf "%20s\n", $_;
  }
  ###########################################

  3. Modify the above program, let user input the align>  #!/usr/bin/perl
  chomp($width=);
  print "1234567890" x $width . "\n";
  while(){
  chomp;
  printf "%${width}s\n",$_;
  }


运维网声明 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-559228-1-1.html 上篇帖子: Perl Learning - 8 (I/O, <>, print(), @ARGV) 下篇帖子: perl:正则表达式部分
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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