文件句柄的几点知识

6个特殊文件句柄是perl保留的,它们是:STDIN,STDOUT,STDERR,DATA,ARGV,ARGVOUT .

指定编码方式读取文件

open CONFG, '<:encoding(UTF-8)','dino';

encoding(UTF-8) 和只写:utf8的区别,简写方式不会考虑输入或输出数据是否真的是合法的utf-8字符串。
使用encoding()的形式,还能指定其他类型的编码。我们可以通过下面的命令打印出所有Perl能理解和处理
的字符编码清单:

perl -MEncode -le "print for Encode->encodings(':all')"

如果想要保存得到的文件每行都以CR-LF结尾,就得在该文件时使用特殊层:

open BEDROCK,'>:crlf', $file_name;

不过注意,如果原本就是CR-LF风格的话,转换后会多出一个换行符。
读取DOS风格的文件时也可以这样转换:

open BEDROCK,'<:crlf', $file_name

读取文件的时候,Perl会把所有CR-LF都转换为Unix风格的换行符。

自动检测致命错误
从Perl5.10开始,为人称道的autodie编译指令已经成为标准库的一部分。
use autodie;

将数据输出到文件句柄时,默认情况下都会经过缓冲处理。
不过将特殊变量$|设定为1,就会使当前的默认文件句柄在每次进行输出操作后立即刷新缓冲区。

select LOG;
$|=1 ; # 不要将LOG的内容保留在缓冲区
select STDOUT;
print LOG "This gets written to the LOG at once!
";

标量变量中的文件句柄
从perl 5.6 开始,我们已经可以把文件句柄放到标量变量中,而不必非得使用裸字。别看这点差别,带来的好处可不少。
成为标量变量之后,文件句柄就可以作为子程序的参数传递,或者放在数组,哈西中排序。不过很多时候我们写的都是应急的短小
脚本,用裸字更快捷,没必要使用变量存储文件句柄。
习惯变量名后面添上_sh表示这是用来保存文件句柄的变量:

open my $rock_fh , '<' , 'rocks.txt';
原文地址:https://www.cnblogs.com/tjxwg/p/3314203.html