2010年(122)
分类:
2010-07-19 14:17:49
第五章 输入与输出
读取标准输入
使用“行输入”
钻石操作符输入
钻石操作符<>。它能让程序在处理调用参数的时候,提供类似于标准Unix工具程序的功能。
钻石操作符是“行输入”操作符的特殊。不过它不是从键盘取得输入,而是从用户指定的位置读取。
#!/usr/bin/perl -w
while(defined($line=<>))
{
print $line;
}
./1 school – major
调用参数
钻石操作符的参数来自@ARGV数组。钻石操作符会查看数组@ARGV以决定该用哪些文件名,如果它找到的是空列表,就会改用标准输入流;否则,就会使用@ARGV里的文件列表。
输出到标准输出
使用数组和数组内插,打印效果是不一样的,后者在每个元素之间加入了空格。
Print括号省略
使用printf格式化输出
与C的类似。Printf操作符参数包括 “格式字符串”及“要输出的数据列表”。
要输出恰当的数值形式,可以使用%g,它会按需要自动选择浮点数、整数甚至指数形式。
%d格式代表十进制的整数,它会舍去小数点之后的数字。
%s代表字符串格式,所以它的功能其实是字符串内插,只是它还能设定字段宽度,如果宽度是负数,则会向左对齐。
%f转换格式会按需要四舍五入,甚至还可以指定小数点之后的输出位数。
数组和printf
使用技术输出数组:
#!/usr/bin/perl -w
my @items=qw( hello world hello everybody );
my $format="words are: \n".("%10s\n" x @items);
printf $format,@items;
文件句柄
文件句柄就是程序里代表Perl进程与外界之间的I/O联系的名字。
6个特殊文件句柄是Perl保留的:
STDIN、STDOUT、STDERR、DATA、ARGV、AGRVOUT。
打开文件句柄
Perl提供的三种文件句柄STDIN、STDOUT、STDERR,都是由产生Perl进程的父进程自动打开的文件或设备。当你需要其他的文件句柄时,请使用open操作符告诉perl,要求操作系统为你的程序和外界架起一道桥梁。
open CONFIG, "school";
open CONFIG, "
open MAJOR, ">major";
open LOG, ">>logfile";
第一行打开名为CONFIG的文件名柄,让它指向文件school。
第二行用了小于号来声明“此文件只是用来输入的”。
第三行它会打开文件句柄MAJOR并输出到新文件major。大于号的用途跟shell的重定向一样,它会将输出送到一个名为major的新文件。
第四行使用两个大于号来指明以追加的方式打开文件。常用于日志文件。
可以使得任何地标量表达式来代替文件名说明符。
新的Perl中,open另有一种使用三个参数的写法:
open CONFIG, “<”, “school”;
不正确的文件句柄
open的返回值也能告诉我们它的执行成功与否:返回真表示成功,否则失败。
关闭文件句柄
使用close操作符。
用die处理严重错误
die函数会输出你指定的信息,并且让你的程序立刻终止,并返回不为零的退出码。
Die会自动将Perl程序名和行号附加在错误信息的后面。
使用warn输出警告信息
warn函数的功能和die函数差不多,不同之处在于最后一步,它不会终止程序的运行。
使用文件句柄
#!/usr/bin/perl -w
if( !open PASSWD, "/etc/passwd")
{
die "How did you get logged in? ($!)";
}
while(
{
print $_;
}
改变默认的文件输出句柄
默认情况下,假如你不为print指定文件句柄,它的输出就会送到STDOUT。不过,你可以使用select操作符来改变默认的文件句柄。
#!/usr/bin/perl -w
if(!open MYOUT, ">>out")
{
print "error!\n";
}
select MYOUT;
print "hello, world!\n";
将数据输出到文件句柄时,默认情况下都会经过缓冲的处理。不过,只要将特殊变量$|设定为1,就会使当前的默认文件句柄在每次进行输出操作后,立刻刷新缓冲区。
复用标准文件句柄
如果你要利用某个文件句柄(换句话说,如果已经打开了某个名为FRED的文件句柄,而现在又要打开同样名为FRED的文件句柄),Perl会自动帮你关闭原有的文件句柄。
跟Shell进行I/O重定向的功能是一样的。
使用say来输出
say函数和print函数差不多,但是会在每行输出的结尾自动加上换行符。