perl的输入与输出



读取标准输入():键盘输入,回车分行,Ctrl+C截止
      例:
              while(){
           print "I saw $_";
       }
       foreach(){
           print "I saw $_";
       }

      简单写法,将输入处理到结尾,不同的是while是取一行处理一行,foreach是全部取出之后再一行行处理。都是每一行作为一条数据,存在默认变量$_中。

钻石操作符(<>):
      例:
              while(<>){
           chomp;
           print "It was $_ that I saw!\n";
       }

      它可以读取一个文件(一行行读取),每一行存在默认变量$_中,需要在执行的时候给出要操作的文件。
      在windows中的操作方法:打开cmd,输入: perl程序.pl 处理文件1 处理文件2... (可以有更多要操作的文件,如果不在当前目录下,要把程序和处理文件的绝对路径写下来)。

调用参数:
      因为调用的文件(注意是文件,也就是cmd运行时要操作的那一串文件)都是事先存放在@ARGV数组中,所以如果改变了@ARGV,无论你调用什么参数执行,只会执行你改变后的文件,如在代码中加入下面一行:
      @ARGV = qw # F:/EditPlus/old/a.txtF:EditPlus/old/b.txt#
      这样,无论你执行是的参数是什么,都会且只操作a.txt和b.txt

输出到标准输出(print):
      print "字符串", n+m, "字符串"; ——无论是字符串,表达式,还是标量都可以一起输出出来
      print @数组名; —— 无间隔把数组打印出来
              print "@数组名"; ——先把数组变成字符串,即以空格分隔成一个字符串,再输出,因此这种有间隔
              print "@数组名\n"; —— 有换行符输出
      print <>; ——输出文件内容,相当于unix下的cat
              print sort <>; —— 排序输出文件内容
      ④ print的返回值是0或1,代表输出是否成功,一般返回1
      ⑤print后面有括号的时候,像函数,那就是函数
              例: print (2+3)*4; 相当于 (print(2+3))*4,结果为4(因为print返回值为1)。用print时要记得它本身是有括号的,只是可以省略。

用printf格式化输出:

      可以像C语言一样,用格式字符串(如%s,%d,M等)
      %g ——浮点数,整数,指数
      %d ——十进制整数(如果放入格式之前是小数,就会舍去小数,是舍去,不是四舍五入)
      %s ——字符串
      %f ——浮点数(会四舍五入,可以指定小数点后的位数)
      %% ——%
      除了%f和%%都可以带数字,表示数的长度,正数的话,多出的位数空格往左加,负数空格往右加,%f如果加数字,第一个数字是长度,第二个数字是小数的位数,以“.”分开。
      例:〇代表空格
             printf "m\n",42; —— 〇〇〇〇42
             printf "%-10s\n","abcde"; —— abcde〇〇〇〇〇
            printf ".3f\n",6*7+2/3; —— 〇〇〇〇〇〇42.667

数组和printf:
      例: printf "The itemsare:\n".("s\n"x@items),@items;
      第1个@items是数组长度,就是要把s\n重复3次,第2个是数组的值,这样即使不确定数组元素个数也能格式化输出。

文件句柄:
      用来以固定格式输入输出。
      命名规范:虽然没有特殊要求,但尽量全大写命名,避免与保留字冲突。
      6个特殊文件句柄:STDIN、STDOUT、STDERR、DATA、ARGV、ARGVOUT

创建文件句柄(打开):
      文件句柄只要打开,就可以定义他的名字和执行方式,使用open。
      例:
              open CONFIG, 'dion'; ——打开,名为CONFIG文件句柄,指向文件dino
              open CONFIG, ' —— 指定了它是读取文件
              open Bedrock, '>fred'; ——指定输出到新文件,如果是有这个文件,清除原文件
             open LOG, '>>logfile'; ——以追加的方式写入,没有,新建文件,如果存在,添加到最文件后面

以二进制的方式读写文件句柄:
      binmode 文件句柄名, '编码方式';
      例:
              binmode STDOUT, ':encoding(UTF-8)'; ——读写都能用
      关闭文件句柄:close文件句柄名; (通常都会自动关闭)

用die处理致命错误:
      一般处理文件都会返回一个状态,非0代表不成功,只有0是成功,因此可以判断它不是0的时候用die()方法终止程序。
      例:
              if(! open LOG,'>>','logfile'){
           die "Can not create logfile:$!";
       }

      $!是错误信息,后面还会自动加程序名和行号

用warn送出警告信息:
      和die差不多,只是不会终止。

自动检测致命错误:
      use autodie;  ——如果open失败,自动启动die

使用文件句柄:
      例:
              if(! open PASSWD,"/etc/passwd"){
           die "How did you get logged in ?($!)";
       }
       while(){ #<>表示一行行读,PASSWD文件句柄
           chomp;
           ...;
       }


改变默认的文件输出句柄:

      如果不指定文件句柄,默认输出送到STDOUT。
      改变:select文件句柄; —— 用过还要设回默认STDOUT
      例:
              select LOG;
       $1 = 1;
       select STDOUT;
       print LOG "...";

      这样当前的默认文件句柄在每次进行输出后like刷新缓冲区

重新打开标准文件句柄:
      如果已经打开了文件句柄: open STDERR
      用下面程序重新打开,并将错误信息写到自己的文件中:
         if (! open STDERR, ">> /home/barney/error.log"){
           die "Can't open error log/for append"
       }

      如果打开新的(或重新打开)文件句柄,就会关闭之前的,如果在重新打开之前就出错,错误信息还是会到之前的地方,也就是说只有成功打开后,才贵关闭之前的文件句柄。

用say来输出:
      例:
              use 5.010; #这样才能用
       say "HELLO!";
       say $变量名;
       say "@array";

      和print差不多,只是有自动换行

标量变量中的文件句柄:
      可以用标量变量做文件句柄,而不用裸字。
      例:
              open my $rocks_fh, '<', rocks.txt or die"Could not openk rodks.txt:$!";
    使用:
       while (<$rocks_fh>){
           ...
       }

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值