• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

perl 入门介绍(2)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

前面一节介绍了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);

         }   

          

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
XP系统怎样配置apache+perl稳定的运行环境发布时间:2022-07-22
下一篇:
用perl查找mysql数据库内容以及添加数据表等发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap