perl-输入与输出

上一篇 / 下一篇  2015-01-05 07:38:53 / 个人分类:Perl

读取标准输入
在标量上下文中执行该操作时,将会返回标准输入中的下一行,如果读到文件结尾,行输入操作符就会返回undef,这样的设计是为了配合循环使用,可以自然跳出循环。如果在列表上下文中调用行输入操作符,它就会返回一个列表,其中包含所有的输入内容,每个列表元素代表一行输入内容。
钻石操作符
它能让程序在处理调用参数时,提供类似于Unix 工具程序的功能。 
程序的调用参数通常是命令行上跟在程序名后面的几个单词。若不提供任何调用参数,程序会从标准输入流采集数据。如果把连字符(-)当作参数,则表示要从标准输入读取数据,让程序以这种方式运行的好处就是你可以在运行时指定程序的输入源。
钻石操作符是行输入操作符的特例,不过它并不是从键盘取得输入,而是从用户指定的位置读取。
钻石操作符只有在碰到所有输入的结尾时才会返回undef.
当前正在处理的文件名会被保存在特殊变量$ARGV中,如果当前是从标准输入获取数据,那么当前文件名就是"-"连字符
钻石操作符的参数是来自@ARGV数组,这个数组是Perl解释器事先建立的特殊数组,其内容就是由命令行参数组成的列表。在程序开始运行前,@ARGV里就已经塞满了调用参数。         
钻石操作符会查看数组@ARGV,然后决定该用哪些文件名,如果它找到的是空列表,就会改用标准输入流,否则,就会使用@ARGV里 的文件列表。
输出到标准输出
print操作符会读取后续列表中的所有元素,并把每一项一次送入到标准输出,它在每一项之前,之后与之间都不会再加上额外的字符。
print @array 会把数组的元素打印出来,不加空格
print "@array" 打印一个字符串,包含@array的所有元素,但元素以空格分开
一般情况下,程序的输出结果会先被送到缓冲区,不会每当有一点点输出就直接送出去,而是先积攒起来,直到数量多时才造访外部设备。
由于print处理的是待打印的字符串列表,因此它的参数会在列表上下文中被执行,而钻石操作符在列表上下文中会返回由许多输入行组成的列表,他们可以配合工作
printf操作符用来格式化输出,他的参数包括格式字符串及腰输出的数据列表。格式字符串里可以有多个所谓的转换,每种转换都会以百分比符号(%)开头,然后以某个字母结尾。后面的列表里元素的个数应该和转换的数目一样多,如果数目不对,就无法正确运行。
要输出恰当的数字形式,可以使用%g,它会按需要自动选择浮点数,整数甚至是指数形式。
%d 格式代表十进制整数,它会舍去小数点后面的数字。无条件截断。
%s 代表字符串格式,它的功能实际上就是字符串内插,但是它还能设定字段宽度。如果宽度字段是负数,则会向左对齐。
%f 转换格式会按需要四舍五入。可以指定小数点后的输出位数。
要输出真正的百分号,使用%%.                                                                 文件句柄
文件句柄就是程序里代表Perl进程与外界之间的I/O联系的名称,他是这种联系的名称,不是文件的名称。建议使用全大写字母来命名文件句柄。
6个特殊文件句柄是Perl保留的,STDIN,STDOUT,STDERR,DATA,ARGV,ARGVOUT 
Perl提供的默认文件句柄在使用时由产生Perl进程的父进程自动打开文件或设备,如果你需要其他文件句柄时,需要用open操作符告诉Perl.
open CONFIG,'<','file';
open CONFIG,'>','file';
open CONFIG,'>>','file';
以三个参数打开文件句柄比较容易区分模式(第二个参数)与文件名本身(第三个参数),在安全性方面也有好处,同时有机会指定数据的编码方式。
open CONFIG,'>:encoding(UTF-8)','file';
open CONFIG, '<:encoding(UTF-8)','file';
open CONFIG,'>>:encoding(UTF-8)','file';   
有问题的文件句柄
如果试着从有问题的文件句柄(即没有正确打开的文件句柄或关闭的网络连接)读取数据,会立刻读到文件结尾(文件结尾在标量上下文中是undef,在列表上下文中则是空列表),如果试图将数据写入到有问题的文件句柄,这些
数据将被丢弃。可以通过open的返回值来判断执行结果成功与否。
当不需要某个文件句柄时,可以使用close操作符来关闭它。所谓关闭文件句柄,就是让Perl通知操作系统,我们对该数据流的处理已经全部完成,请系统将尚未写入的输出数据写到磁盘。当重新打开某个文件句柄时,Perl会
自动关闭原先的文件句柄,在程序结束时,Perl也会自动关闭文件句柄。
用die函数处理致命错误
die函数会输出你指定的信息到专为这类信息准备的标准错误流中,并且让你的程序立刻终止并返回不为零的退出码。die函数会自动将Perl程序名和行号附加在错误信息的后面,因此可以轻易判断出程序里的哪个die函数才是造成程序过早结束运行的原因。
用warn函数送出警告信息
warn函数的功能是产生警告信息,它不会终止程序的运行。
自动检测致命错误
autodie, autodie是编译指令,靠判断具体操作的类型来工作,如果Perl内置函数的幕后操作需要调用系统接口的话,中途出现的错误并不是编程人员所能控制的,所以一旦发现这部分系统调用出错,autodie会自动帮你调用die。
使用文件句柄
以写入或添加模式打开的文件句柄可以在print或printf函数中使用,使用时,可以直接将他放在函数名之后,参数列表之前。文件句柄和输出的内容之间没有逗号。       
$! Perl特殊变量,可读的系统错误信息。      
改变默认的文件句柄
可以用select改变默认的文件句柄。
将数据输出到文件句柄时,默认情况下都会经过缓冲处理,将$|设定为1,就会是当前的默认句柄在每次进行操作后立即刷新缓冲区    
重新打开标准文件句柄
错误信息不一定都要送到程序的标准错误输出流,也可以送到文件里
在重新打开三个系统文件句柄STDIN,STDOUT或STDERR失败时,Perl会帮你找回原来的句柄,Perl只有在成功打开新的句柄连接时才会关闭默认的系统文件句柄。
用Say来输出
Say的功能和print函数差不多,但在打印每行内容时会自动加上换行符。
标量变量中的文件句柄
可以将文件句柄放到标量变量中,成为标量变量后,文件句柄就可以作为子程序的参数传递,或者放在数组,哈希中排序,或者严格控制它的作用域。                                                                                 

                                                                                                                                                                                                      

                                                                                                                                                                                                      

     

TAG:

 

评分:0

我来说两句

Open Toolbar