perl语言入门(4)

 

第五章 输入与输出
1.读到文件的结尾,<STDIN>会返回undef。
    print ();
    其实也是一个函数调用,括号可有可无。
    print (2+4)*2
    # 相当于(print 2+4)*2
    -连字符相当于标准输入
    print 2*(2+4) # 这个是正确的
    如果在列表上下文中调用'行输入'操作符,它会返回一个列表
    例如模拟cat,print <>;

2.钻石操作符的输入
    是行输入操作符的特例,不是从键盘区的输入,而是从用户指定的位置
    读取。指定的位置由@ARGV的元素确定。
    相当于shell的位置参数如果@ARGV为空则改用标准输入.
   
    ## 这是一种简写 只有在while (<>)或for,这种简写情况下才会把读入放入
           老地方$_.
    @ARGV = qw/abc.txt/;
    while (<>) {
        print "$_";
    }
    对于当前正在处理的从位置参数获取的文件其文件名保存在
$ARGV变量中
perl -n -e ' if (/\bxx\b/) {print " $ARGV\n";last}' *
# 列出当前含有xx词的文件
# \b边界针对的是\w组成的单词
    while是一行一行的读入,而foreach是全部读入。
    while.foreach都有$_

3.printf格式化输出
    print示例:
    my @array = qw/a b c d e/;
    print @array,"\n"; #只打印元素没有空格
    print "@array";    #数组元素间用空格隔开

        一般情况下输出会先送到缓冲区.
    格式 printf "%s test %d\n",$user,$days;
    # 格式字符串个数=变量个数
  数组和printf
        my @items = qw(wilama dino pebb);
    my $format = "%10s\n" x @items;
    printf $format,@items;

4.文件句柄
  最好大写,6个特殊文件句柄STDIN,STDOUT,STDERR,DATA,ARGV,AGVOUT
  打开文件句柄
  open LOG, "dino";#默认从dino读入
  open LOG, "<dino";#同上
  open LOG, ">>dino";# 追加
  ## >,>> 若果文件不存在就创建.
  close LOG #关闭文件句柄

5.die处理严重错误
  die输出指定信息,并且程序立刻终止,返回不为0的退出码.
  并且打印出错的程序名和行号.如果在die信息尾加\n,则不打印.
  if (! open LOG, ">dino") {
    die "Cannot create file: $!"
   #die "Cannot create file: $!\n"
  }
  ## $!系统出错信息比方permission denied

6.使用文件句柄
  if (! open LOG, "/etc/passwd") {
    die "hello,($!)";
  }
 
  while (<LOG>) {
   print "$_";
  }
  # 默认每个文件的行都是字符串+\n

  print OUT "first";
  print OUT ("second");
  # 结果firstsecond

7, print默认输出到STDIN
   改变文件句柄
   select OUT;
   # 默认输出到文件句柄时都会经过缓冲
   # $| =1 立刻刷新缓冲区
   print "first";
   # 文件句柄改回STDOUT
   select STDOU;

8. 文件句柄复用
   如果打开了句柄OUT,  又打开了同名的句柄OUT,则先前的会自动关闭
  
   复用默认的文件句柄
   if (! open STDOUT, ">fuyong") {
     die "heloo,$!\n";
    }

   print "test STDOUT repeat.\n";
   ## 还不知道怎么还原STDOUT
9. 使用say来输出,要在perl5.10声明use 5.010;才能使用say
       say函数和print函数差不多,但是会在每行输出的结尾自动加上换行符。

 

你可能感兴趣的:(perl,休闲,文件句柄,Die,钻石操作符)