文件句柄
文件句柄就是Perl程序里的某个名 称,代表Perl进程与外界之间的输入/输出联系。文件句柄的命名和Perl中其它变量命名没有差别(数字、下划线、字母构成,字母、下划线开头),因没 有任何的前置字符,容易和一些保留字或者"标签"互相混淆,Larry建议大家用大写字母来标表示文件句柄(否则会报错:Unquoted string "xxx" may * with future reserved word at yyy line zzz.)。
Perl保留了6个有特殊用途的文件句柄名称:STDIN STDOUT STDERR DATA ARGV和ARGVOUT。用户自定义的文件句柄不得与这6个文件句柄重名(书不是这么写的,纯属个人理解,Perl的原则就是减少不必要的限制,但你也不应该滥用这份*)。
打开文件句柄
使用open操作符告诉操作系统,你要打开的文件。例如:
$dino = <STDIN>; #可以在此输入要读入的文件的路径,例如$dino = 'D:\sequence.txt';
$fred = <STDIN>; #可以在此输入要输出的文件的路径,例如$fred = 'D:\result.txt';
open CONFIG,"$dino"; #打开一个叫CONFIG的句柄,并读入从$dino这个路径输入的文件(外部文件,一般为txt格式)
open CONFIG,"<$dino"; #和上一句的效果相同,小于符号说明这个这个句柄是用来输入的
open BEDROCK,">$fred"; #大于符号是用来创建一个新文件并将文件保存到从$fred获得的路径下,如文件已经存在,原来的内容将被覆盖
open LOG, ">>logfile"; # 如果logfile已存在,新内容将追加到原文件的后面;如果不存在,将创建新文件
使用文件句柄
所谓的"行输入"操作符是由两部分组成的:一对尖括号(真正的"行输入"操作符)以及里面用来输入的文件句柄。
例如我们要把从CONFIG读入的信息从BEDROCK输出,即把D盘中sequence.txt这个文件里的内容放到vector.txt这个文件中。可以这样做:
print BEDROCK <CONFIG>; #我的理解是"<文件句柄名称>"相当于一个标量(如$abc)或者一个数组(如@array),可以直接操作。