错误输出函数与错误变量

open() || die "error$!"; 成功时不执行die,失败时执行  (||或操作)

die($errstr);向STDERR输出指示错误信息的串,然后退出程序。

warn($errstr);向STDERR输出信息,不退出程序

$! 最后一次错误的信息。与die,warn 结合使用。

die($str)中$str中最后不是\n时,输出自动添加at程序名line行号。

如die("can't open");输出can't open at myprog line 13

加上\n如“can't open\n"时没有添加的信息。


open (FD,"5.pl") || die ;
@line=<FD>;
foreach (@line) {
print $_;
};
print "xxxxxxxx";

die 直接退出


open (FD,"5.pl") || warn($errstr); ;
@line=<FD>;
foreach (@line) {
print $_;
};
print "xxxxxxxx";

warn($errstr);向STDERR输出信息,不退出程序


文件缓冲:
close(F);最后要关闭文件。隐含关闭文件,重打开已经打开的,先关闭再打开,程序退出自动关闭。真正写文件。


文件缓冲:通常为代缓冲的文件写。写文件时,系统先写到称为文件缓冲区的内存中,缓冲满再真正写入磁盘。一般在关闭时缓冲内容才开始写入磁盘,

称为刷新。结果时用tail -f 是看不到不断地输出内容的。


无文件缓冲:每次写都真正写入磁盘中,不经过内存。频繁写入可能影响性能。

设置$|变量决定是否有文件缓冲,$|=1无缓冲。但值对当前输出文件有效。如STDOUT,设置另外的文件要先用select(F).

select(F)设置当前文件,返回原文件句柄。设置完再SELECT(OLD)返回原文件。

            缓冲                  无缓冲
打开:  open,sysopen              sysopen

关闭       close                 

读       <>,readline             sysread

写       print                   syswrite


定位        tell,seek            sysseek


文件名:

Filename:含相对路径或绝对路径的文件名

 不含路径的文件名前的空格可以忽略,但有路径的文件名不能。

可以用变量代表文件名

特殊的文件如">file",可能使读变成写。使用变量代表文件名时注意过滤文件名。

赋值文件句柄;open(F,">&STDOUT);写入F文件的内容都变成写入屏幕STDOUUT

使用文件描述符:open(F,">&3);把文件描述符赋值成句柄。或者">&=3"

open() 打开成功返回非零,失败返回零 



其他文件打开函数:

间接文件变量:用简单变量表示文件变量,代表文件变量名。

$a="F";open($a,"mode","path");

sysopen(H,name,m|o|d|e,priv);文件句柄,文件名,读写模式,权限。

权限类似0755的数字,模式有

O_RDONLY,


读文件

$line=<file>读一行到line,指针后移一行。缺省读到$_中

$/='\n',行分割符,遇到它则为一行结束,行包含$/.

可用chomp($s)去除标志,行尾不含$/则不去除自负

可设置$/为其他自负窜,遇到$/为行结束,chomp 去除此字符窜

@array = <file>文件内容全部读出,每行为一个元素。含回车。

当从STDIN中读时,可省略为<> .原理见后

read (F,$in,len[,$offset])
getc(F) 读一个字符

用$/ 来表示行分割符