创建文件句柄(打开): 文件句柄只要打开,就可以定义他的名字和执行方式,使用open。
例:
open CONFIG, 'dion'; ——打开,名为CONFIG文件句柄,指向文件dino
open CONFIG, ' —— 指定了它是读取文件
open Bedrock, '>fred'; ——指定输出到新文件,如果是有这个文件,清除原文件
open LOG, '>>logfile'; ——以追加的方式写入,没有,新建文件,如果存在,添加到最文件后面
用die处理致命错误: 一般处理文件都会返回一个状态,非0代表不成功,只有0是成功,因此可以判断它不是0的时候用die()方法终止程序。
例:
if(! open LOG,'>>','logfile'){ die "Can not create logfile:$!"; } $!是错误信息,后面还会自动加程序名和行号
用warn送出警告信息: 和die差不多,只是不会终止。
自动检测致命错误: use autodie; ——如果open失败,自动启动die
使用文件句柄: 例:
if(! open PASSWD,"/etc/passwd"){ die "How did you get logged in ?($!)"; } while(){ #<>表示一行行读,PASSWD文件句柄 chomp; ...; } 改变默认的文件输出句柄: 如果不指定文件句柄,默认输出送到STDOUT。
改变:select文件句柄; —— 用过还要设回默认STDOUT
例:
select LOG; $1 = 1; select STDOUT; print LOG "..."; 这样当前的默认文件句柄在每次进行输出后like刷新缓冲区
重新打开标准文件句柄: 如果已经打开了文件句柄:
open STDERR 用下面程序重新打开,并将错误信息写到自己的文件中:
if (! open STDERR, ">> /home/barney/error.log"){ die "Can't open error log/for append" } 如果打开新的(或重新打开)文件句柄,就会关闭之前的,如果在重新打开之前就出错,错误信息还是会到之前的地方,也就是说只有成功打开后,才贵关闭之前的文件句柄。
用say来输出: 例:
use 5.010; #这样才能用 say "HELLO!"; say $变量名; say "@array"; 和print差不多,只是有自动换行
标量变量中的文件句柄: 可以用标量变量做文件句柄,而不用裸字。
例:
open my $rocks_fh, '<', rocks.txt or die"Could not openk rodks.txt:$!"; 使用: while (<$rocks_fh>){ ... }