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

[经验分享] Perl 学习笔记(1)

[复制链接]

尚未签到

发表于 2018-8-31 11:04:39 | 显示全部楼层 |阅读模式
  在本章将要学习:(1)system()函数 (2)捕获输出 (3)代码的移植性
  一、system()函数
  若要运行非perl的命令,最简单的方法是使用system()函数。system()函数能够暂停perl程序,运行外部命令,接着在运行你的perl程序。
  system("ls -l") ;system("dir /w")
  system()函数允许你使用命令提示符向你提供的命令解释程序的特性,因为perl的system命令能够调用一个shell或cmd。这样就能够在UNIX下执行重定向、管道传输和后台操作等任务。
  system("sort $f | lp");system("xterm &");
  二、捕获输出
  system函数有一个很小的不足,它没有提供一个好的方法来捕获命令的输出,并将它送往perl进行分析。可以使用迂回的方式进行这项操作,例如:
  system("dir > outfile");
  open(OF,"outfile");
  @data=;
  close(OF);
  这个方法很麻烦,还可以用反引号括起来的任何命令均由perl作为外部命令运行
  $directory=`dir`;
  在上面这个代码段中,运行的是dir命令,其输出在$directory中捕获。
  @dir=`ls -l`;
  $i=0;
  foreach (@dir) {
  print "$i ", $_, "\n";
  $i++;
  }
  在上面这个代码中,@dir的输出在foreach中循环处理,每次处理一行。
  perl参与管道运行的方法是将管道视为既可以读取也可以写入的文件,使用open()函数来实现。
  open(RH,"ls -l | sort |") || die "Cannot open file: $!\n";
  在上面这个代码中,open函数打开一个管道,以便从ls -l | sort读取数据。
  open(RH,"| more") || die "Cannot open file: $!\n";
  在上面代码中,open函数打开了一个管道,以便将数据写入more命令。输出到RH文件句柄的所有内容均被more缓存。
  三、可移植性入门
  编写“到处均可运行的”代码时遵循的原则:
  (1) 始终使警告特性处于打开状态,并使用use strict命令。
  (2) 始终都要检查来自系统请求的返回值。例如应该使用open || die
  (3) 输出表义性强的出错消息。
  (4) 使用perl的内置函数,执行你要用system函数或反括号。
  (5) 将依赖系统执行的操作(文件I/O,进程控制)封装在函数中,检查以确保这些操作受当前操作系统的支持。
  perl有一个特殊的变量$^O,这个变量包含程序运行时在的操作系统结构,例如在windows下,它包含字符创“MSWin32”。在UNIX下,它包含“linux”。
  use strict;
  if ($^O eq 'MSWin32') {
  my(@dir,$free);
  @dir=`dir`;
  $free=$dir[$#dir];
  $free =~ s/.*([\d,]+) \w+ free/$1/;
  $free =~ s/,//g;
  print "$free\n";
  } elsif ($^O eq 'linux') {
  my(@dir,$free);
  @dir=`df -k`;
  $free=(split(/\s+/,$dir[$#dir]))[3];
  $free=int($free/1024);
  print "${free}M\n";
  } else {
  warn "Cannot determine free space on this machine\n";
  }
  也可以封装的函数中,以便以后随时可以调用
  sub freespace {
  my(@dir,$free);
  if ($^O eq 'MSWin32') {
  @dir=`dir`;
  $free=$dir[$#dir];
  $free =~ s/.*([\d,]+) \w+ free/$1/;
  $free =~ s/,//g;
  } elsif ($^O eq 'linux') {
  my(@dir,$free);
  @dir=`df -k`;
  $free=(split(/\s+/,$dir[$#dir]))[3];
  $free=int($free/1024);
  } else {
  warn "Cannot determine free space on this machine\n";
  }
  return $free;
  }


运维网声明 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-559302-1-1.html 上篇帖子: Windows下 Apache、PHP和Perl的安装配置 下篇帖子: perl语言入门(5)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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