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

[经验分享] perl 入门介绍(2)

[复制链接]

尚未签到

发表于 2015-12-25 14:33:54 | 显示全部楼层 |阅读模式
  前面一节介绍了Perl中的基本数据类型及其使用方式,本节介绍一下分支循环控制及IO。
  Perl中的分支循环在语法上和C家庭语言的语法很相似,关键字包括: If / else, for ,while 。前面已经讲过,Perl中代码块用大括号{}围起来,表达式以分号结尾,这些都和C相似,但在Perl中,使用if for while时,大括号是强制要求的,这点与c不一样。细心的人可能会发现前一节讲数据类型的时候,并没有涉及到整形,浮点,bool什么的,只说到了一个标量,事实上在Perl里,这些基本数据类型并不严格区分,都可以归到Scalar里头去,这也大概算是脚本语言的一个通用做法, 弱化了基本类型。
  其它先不提,分支循环在很多语言里有一个很关键数据:bool。控制分支走向需要一个判断点,真要怎样做,假要怎样做,但在Perl里,没有一个具体的true,false类型,所以在做真假判断时,遵循以下原则:

  •      如果是数据类型,0则为假,
  •      如果是字符串,空字符串为假。
  •      如果是集合,空集合为假。
  这些都比较好理解。
  
  (一) if / else
  Perl中的if/else语法上和c语言一致,除了要求一定要有大括号。
  逻辑判断操作: 与(&&), 或(||),非(!) 语法上也很和C是一致的。
  $str = "abc";
  @arr = (2,3,4);
  if( $str && @arr == 3)
  {
  }
  else
  {
  }
  上面的例子是一种比较传统老式的写法,前面我说if / else 和C中的语法一致,其实也不大准确。
  Perl自己还提供了一套与C不大一样的写法,风格上更像是自然语言一样。
  
  $var = 2;
  Print " hello world" if ($var > 0); #注意这行,等价于:   if ($var > 0) { print "hello world";}
  
  这种写法就像是自然语言里的倒序了。
  像上面这种写法,还有另外一个关键字也是同样适用的: unless
  Print " hello world" unless ($var > 0);
  (二) 循环: for / while / foreach   
  for ($i=0; $i<100; $i++)
         {
          print "hello $i \n";
       }
  
  while( $i < 100 )
  {
  print "hello $i \n";
  $i++;
  }
  上面两字例子演示了 for / while的写法,可见是和C 在语法上是一样的。
  除了for / while ,Perl还提供了一个 foreach 专门用来处理数组。
  @arr = (1,2,3,4,5);
  foreach $item (@arr)
  {
  print "item: $item\n";
  }
  注意foreach 那一行中的小括号是不能省的。
  (三) I/O
  Perl中进行I/O操作延用了unix中的IO概念,一切都抽象成文件。
  所以,I/O操作都是对一个文件句柄(file handle)进行操作,包括标准输入标准输出。
  
  (1) 标准输入,标准输出。
  
  前面示例代码中多次用到了print,在之前的写法这是标准输出,但它的功能却不仅限于标准输出,事实上它的准确原型是:
  print <file handle> "hello world\n";
  如果省略了 file handle,默认情况下就是标准输出,标准输出的句柄 <STDOUT>
  所以前面的print语句,事实上等价于:
  print STDOUT "hello world\n";
  对应的标准输入是STDIN, 这个两个变量是Perl预定义的。
  可以看成是一个关键字一样,也不需要在这些变量前面加$,@这类的符号 。
  前面一直只示例了标准输出,没有提过标准输入。
  标准输入语法上,也很简洁:
  $line = <STDIN>; #read
  用尖括号把文件句柄括起来,就相当于从里面读数据。
  
  (2) 文件I/O
  
  获取及关闭文件要用Open()/Close()函数。
  $succ=  open(fh,“~/myfile.log”);
                if($succ)
                  {
                      $line = <fh>;#read one line.
                      @all = <fh>;  #read the whole file.
                      print "@line \n";
                      close(fh);
                   }
  
           值得注意的是,文件句柄的声明是可以不用加$这种符号,直接写一个名字就够了,当然,你如果喜欢加上$,也是没问题的。
  前面的示例演示了读入时的最基本的做法,Perl还提供了和C语言里类似的文件操作函数:seek, tell,
  用来定位到文件的相应位置进行读写。
  它们的用法和c语言很相似,具体使用方式,有兴趣的读者可以自己去查阅一下官方文档。
  前面的open()函数示例了文件打开的最基本形式,事实上,这个函数l还支持设置访问模式。
  文件访问模式:
  访问模式                         例子                                                  说明
  读(Read)                        open(FH,"< FileName");                从文件中读取
  写(Write)                        open(FH,"> FileName");                向文件中写入,覆盖旧文件中的内容
  追加(Append)                 open(FH,">> FileName");              向现有文件的尾部追加数据
  读写(Read and Write)     open(FH,"+< FileName");               读取和写入现有文件
  写入程序                        open(PIPEOUT,"| pipeout");            打开程序管道
  读取程序                        open(PIPEIN,"pipein |");                  从程序或命令的输出中取得数据
  
  如果打开的文件支持写操作,我们就可以用Print 函数往文件里写东西:
  if(open(fh,">~/file.log"))
  {
  print fh "hello file\n";
  close(fh);
  }   
  
  

运维网声明 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-156251-1-1.html 上篇帖子: perl读写文件和命令行解析 下篇帖子: Perl IDE之Perl Express和Eclipse+EPIC+PadWalker
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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