Chinaunix首页 | 论坛 | 博客
  • 博客访问: 342166
  • 博文数量: 122
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 1191
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-24 11:12
文章分类

全部博文(122)

文章存档

2010年(122)

我的朋友

分类:

2010-07-19 14:17:49

第五章 输入与输出

读取标准输入

       使用“行输入”操作符读取标准输入流。读到文件结尾,“行输入”操作符返回undef

钻石操作符输入

       钻石操作符<>。它能让程序在处理调用参数的时候,提供类似于标准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保留的:

STDINSTDOUTSTDERRDATAARGVAGRVOUT

打开文件句柄

Perl提供的三种文件句柄STDINSTDOUTSTDERR,都是由产生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函数差不多,但是会在每行输出的结尾自动加上换行符。

阅读(2095) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~