Perl中输入输出分两类,一类是键盘输入和显示屏输出,另一类是读和写文件。
1 键盘输入和显示屏输出
1.1 从键盘输入
在Perl中,尖括号<>表示读入一行,<STDIN>表示从标准输入流中读取一行。<STDIN>会一直读取用户在键盘上输入的字符,直到用户输入回车 。如,
my $line = <STDIN>;
(注意:回车也会保存到标量$line中)
1.2 输出到显示器
在Perl用STDOUT表示输出到显示器(或终端界面)。例如:
print STDOUT "Hello";
#一般把STDOUT省略掉,写成print "Hello";
2 读和写文件
Perl使用一种叫文件句柄类型的变量来操作文件。从文件读取或写入数据需要使用文件句柄。文件句柄(filehandle)是一个I/O连接的名称。Perl提供了三种文件句柄:STDIN,STDOUT,STDERR,分别代表标准输入、标准输出和标准出错输出。
#文件操作的格式
open(filehandle, mode, filename); #open为打开文件操作
filehandle是文件句柄,一般用大写字母命名。
open是对文件的操作。对读写文件来说有几种操作:打开文件open,移动读写指针seek,读文件read,写文件write,关闭文件close。
mode定义了文件的操作模式:读<,写>,追加>>等。
filename是文件名,读的时候文件不存在则会报错,写的时候文件不存在则会自动创建。
返回值:0表示失败,1表示成功。
2.1 open函数
open(FIN, "<", "testcase.lst") or die "Cannot open file: $!";
其中FIN是新定义的文件句柄,文件句柄不需要my修饰,也不需要$符号。“<”表示只读方式。“<”和“testcase.lst”也可以合并在一起简写成“<testcase.lst”。如果文件不存在,die函数则会被调用(将在2.2解释)。
“>”表示以写入的方式打开文件。如果需要以读写方式打开文件,可以在 > 或 < 字符前添加 + 号:
open(FIN, "+<testcase.lst") or die "Cannot open file: $!";
这种方式不会删除文件原来的内容,如果要删除,格式如下所示:
open FIN, "+<testcase.lst" or die "Cannot open file: $!";
2.2 die函数
`die` 函数是 Perl 中用于抛出异常并终止程序执行的函数。它接受一个字符串参数,用于描述异常的原因,然后会输出该字符串并终止程序的执行。
open(FIN, "<", "testcase.lst") or die "Cannot open file: $!";
在上述示例中,我们尝试打开一个名为 "testcase.lst" 的文件。如果文件无法打开,`open` 函数会返回假值,然后 `die` 函数被调用。
`die` 函数的参数是一个字符串 `"Cannot open file: $!"`,它描述了无法打开文件的原因。`$!` 是 Perl 的特殊变量,用于存储最近一次系统调用的错误信息。
当 `die` 函数被调用时,它会将该字符串输出到标准错误流(STDERR),然后终止程序的执行。同时,也可以选择在输出字符串前加上文件名和行号等其他额外信息,以提供更详细的错误消息。
2.3 seek函数
seek()函数是通过文件句柄来移动文件读写指针的方式来读取或写入文件的,以字节为单位进行读取和写入:
seek(filehandle,position, whence);
filehandle是文件句柄,position是相对于whence相对偏移字节数。whence是三个值:0表示文件开头,1表示当前位置,2表示文件末尾。返回值0表示失败,1表示成功。例:
seek(FIN,54,0); #相对于文件开头,偏移54个字符
seek(FIN,-5,2); #相对于文件末尾,偏移5个字符,注意偏移量用负数。
可以使用<FIN>来读取文件一行,配合while循环就可以读取整个文件。如:
my $file = "";
while(<FIN>){
$file .= $_; #这里$_是Perl的内置变量,根据上下文,这里表示的是<FIN>刚刚读入的一行数据。
}
2.Close函数
在文件使用完后,要关闭文件,以刷新与文件句柄相关联的输入输出缓冲区,关闭文件的语法如下:
close FILEHANDLE; # FILEHANDLE 为指定的文件句柄,如果成功关闭则返回 true。
close(FIN) || die"无法关闭文件";