leanging perl(二) 输入与输出

perl 主要是对文件进行处理,所以免不了需要输入与输出。


1.输入

a) 标准输入。 标准输入就是来自键盘的输入了,可以这么用 chomp($line = <STDIN>) 其中,<>接受出入,STDIN表示标准输入,读入标量$line, chomp操作符用来去除输入行末尾的换行符(\n)。也可以这样使用:while (<STDIN>) {

chomp; #默认对$_进行处理,等于上一例中的$line

}

b) 从文件输入。 钻石操作符<>,可以接受命令行的文件名,对文件进行按行输入,读取参数来自@ARGV数组,如程序program内容有

while (<>) {

chomp;

...

}

则可以在命令行这样输入$ ./program hello world程序会把hello 与 world 文件放入@ARGV数组,然后从数组中依次读取文件,进行处理。如果数组为空,也就是没有参数(即要处理的文件),就会改用标准输入流。


2.输出

a)标准输出。 有输入自然要有输出,标准输出就是输出内容到屏幕上。一般使用print 即可。如print "@arr"与print @arr,所不同的是前者会依次打印数组元素,有空格连接,后者没用空格。 如果想像C语言一样有格式化输出,可以使用printf,如printf "I'm %s\n",$name; 模式为‘格式字符串’加上‘要输出的列表’。转换的格式常用的有:%g 自动选择数值形式;%d 十进制整数,%x 十六进制,%o 八进制;%s 字符串;%10.3f 浮点数,四舍五入,表示向右对齐共十位,保留小数点后3位;%-4d,表示向左对齐,共四位。注意要输出%需要用%%。

有一个很不错的输出数组的方式printf "The items are:\n".("%10s\n" x @arr), @arr;其中@arr在这里返回数组的元素个数,x表示重复这么多次,即可格式化输出数组全部元素。

b)输出到文件。 需要先打开文件句柄。


3.文件句柄

在shell中输入命令 $ ./program <file_input> file_output 即表示程序从file_input读取输入,输出到file_output。

a)打开文件句柄。 open HD, "< file_input", open OUT," >file_output", open OUT, ">> file_output",分别表示打开文件句柄输入,输出(要么新建文件,要么清空原文件),以添加方式输出。在新版本中当然可以将 '>'  '<'分出来写,更加安全。

b)关闭文件句柄。 close HD,close OUT。


c)出错处理。 不是每次打开文件都会成功大笑,这时候可以使用die函数处理,如下:

open HD,"< file_input" or die $!;

如果打开失败会使程序终止运行,并输出$!中内容,包含了失败的原因。 也可以使用warn函数,与die类似,但是不会终止程序运行。


d)使用文件句柄。 了解了上面三点,就可以使用文件句柄工作了生气

open HD, "< file_input" or die $!; #打开HD,输入file_input内容

open OUT, ">> file_output" or die $!; #打开OUT,以追加方式打开file_output

while (<HD>) { #每次读取输入内容的一行

chomp;

my $line .= $_;#将每一行内容连接起来,放入$line

do_something;

}

print OUT "$line\n"; #最后通过句柄OUT将结果输出到file_output。注意OUT与后面内容之间没有逗号。

close HD,OUT;

也可以用say函数来代替print输出,不同之处是末尾默认带上换行符\n,很适合懒人啊吐舌头


有时候会需要将文件一次性读入,然后进行处理。有一个小技巧可以实现。

open FH,"< file_input" or die $!;
local $/ = undef;
my $lines = <FH>;
close FH;

$/ 存储的是每行文件的结束标志,默认为“\n”,改为undef之后,相当于每一行都没有结尾,自然可以一次性读入了,然后就可以用$lines进行自由的文本处理了,使用local表示这个改变只适用于本处,不过如果是同一文件,下面接着要进行按行读入,可以这样改回来local $/ = "\n"。这样就可以了。


掌握了这些,相当于掌握了文本处理的框架,接下来就可以进一步的学习perl了。奋斗

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值