找回密码
 注册
查看: 2373|回复: 0

perl语言中重新打开文件句柄

[复制链接]
发表于 2011-11-13 23:06:48 | 显示全部楼层 |阅读模式
本帖最后由 xiaoliu 于 2011-11-13 23:07 编辑

我们早期提到过,如果重新打开一个文件句柄(例如,打开一个文件句柄FRED,但之前已经打开了一个名为FRED 的句
柄),前一个句柄将被自动关闭。我们也说过不能重用六种标准的文件句柄,除非想利用其特殊的性质。我们还说过die 和
warn 产生的信息,以及Perl 内部产生的提示(complaints)信息将自动传到STDERR 上。如果把这三条信息结合起来看,你
就知道怎样把错误信息传给文件,而非标准错误流◆:
◆不要轻易这样使用。通常让用户在调入程序时设置而非在代码中写死更好。但是,如果程序由其它程序运行,则使用这种方法将非常方
便(例如,web 服务器,或者调度程序如:cron,at)。另一个理由是你的程序可能启动一个新的进程(如system, exec,),
你希望它们有不同的I/O 连接。
#将出错信息送到私有错误日志上
if(! Open STDERR, “>>/home/barney/.error_log”){
die “Can’t open error log for append: $!”;
}
当重新打开STDERR 时,Perl 中的任何错误信息将被写入新的文件。但如果执行了die 语句,并且接收错误消息的文件没
有打开,会出现什么情况呢?
答案是,如果系统的三个句柄STDIN, STDOUT, STDERR 重新打开时没有成功,Perl 会自动使用前一个◆。也就是说,只
有Perl 成功的重新打开新的连接,否则是不会关闭以前的连接。
◆至少,如果没有改变Perl 变量$^F,这是正确的。如果修改了,结果就不定了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-23 19:44 , Processed in 0.022668 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表