码迷,mamicode.com
首页 > 其他好文 > 详细

perl学习笔记四——输入与输出

时间:2015-07-10 11:08:04      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:

读取标准输入

用<STDIN>进行标准输入:chomp($line=<STDIN>);

如果读到文件尾,行输入操作符就会返回undef。便可利用这一性质跳出循环。

while(defined ($line=<STDIN>)){

  print "I saw $line";

}

简写为:

while(<STDIN>){

  print "I saw $_ .";

}

注意:这个简写只在最早的写法中才能正常运行,如果将行输入操作符放在其他的任何地方(特别是自成一行),他并不会读取行输入并自动保存入默认变量$_。唯独在while循环中条件表达式里只有行输入操作符的前提下这个简写才起作用。

 同样foreach也有这样的用法:

foreach (<STDIN>){

  print "I saw $_";

}

不同之处在于:while每读入一行就处理一行,foreach需要一次性读完再处理。

#!/usr/bin/perl
use strict;
use warnings;

while (<STDIN>) {
    print "I saw $_ \n";
}
foreach  (<STDIN>) {
    print "I saw $_ \n";
}

技术分享

来自钻石操作符(<>)的输入

可以用钻石操作符编写类似cat、sed、awk、sort、grep、lpr等工具程序。

程序调用参数:$./my_program fred barney betty

如果比提供任何调用参数的话,程序会从标准输入流中采集数据。此外:如果用连字符(-)当作参数,则表示要从标准输入中读入数据。所以假如调用参数fred - betty,那么程序应该先处理文件fred,然后处理标准输入流提供的的数据,最后是betty。

 

钻石操作符就是行输入操作符的特例。不过他并不是从键盘中读取输入,而是从用户指定的位置读取:

while(defined($line =<>)){

    chomp($line);

    print "It was $line that I saw!\n";

}

如果现在输入的是调用参数是fred、barney、betty那么,输出结果就会是"It was [从文件中读取的一行内容] line  that I saw!"等,直到遇到文件尾结束。注意:<>在读完一个文件后会接着读新的文件,然后在逐行输出内容。应为使用钻石操作符时已经报这些文件合并成一个很大的文件一样,钻石操作符只有碰到所有的输入的结尾时才会返回undef然后跳出while循环。

上面代码简写:

while (<>){

    chomp;

    print "It was $_ that I saw!\n";

}

注意:钻石操作符一般会处理所有的输入,所以在程序中如果看到多个钻石操作符那么通常是错误的。

 

#!/usr/bin/perl
while (<>){
    chomp;
    print "$_ \n";
}
//注意代码中下面执行指令中添加了-,并从grep的输出管道中读入

技术分享

 

perl学习笔记四——输入与输出

标签:

原文地址:http://www.cnblogs.com/lukexwang/p/4634824.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!