warn "Debug enbled" if $debug;
如果 LIST 为空并且 $@ 已经包含一个数值(通常是前面的 eval 留下来的),那么字串 "\t... caught" 在 STDERR 上附加在 $@ 后面。(这样做类似 die 传播错误的方法,只不过 warn 并不传播(抛出)该例外。)如果你提供的字串上是空的,那么使用 "Warning: something's wrong"。
和 die 一样,如果你提供的字串并不是以换行符结尾,那么自动附加文件和行号信息。warn 函数和 Perl 的 -w 命令行选项没有关系,但是可以和它一起使用,比如在你想模拟内建函数的时候:
warn "Something wicked\n" if $^W;
如果安装了 $SIG{__WARN__} 句柄,那么不会打印任何信息。这个句柄是负责对它看到的信息进行适当处理用的。你想这么做的一个原因可能是把简单的警告转化成一个例外:
local $SIG{__WARN__} = sub {
my $msg = shift;
die $msg if $msg =~ /isn't numeric/;
};
因此大多数句柄都必须对那些它们原先没有准备处理的警告安排显示处理的工作,方法是在句柄里调用 warn。这么做非常安全,它不会产生无限的循环,因为 WARN 挂钩不会在 WARN 里面被调用。这个行为和 $SIG{__DIE__} 的行为(它不会消除错误文本,但是可以再次调用 die 来改变它)略有区别。
使用 WARN 句柄给我们提供了一个强有力的抑制所有警告的方法,甚至连那些强制性的警告也给抑制住了。有时候你需要把这个东西封装在 BEGINP{} 块里,这样它就可以在编译时起做用:
# 扫荡掉所有编译时间警告
BEGIN { $SIG{__WARN__} = sub { warn $_[0] if $DOWARN } }
my $foo = 10;
my $foo = 20; # 不要警告我说重复了 my $foo,
# 不过,这可是你说的!
# 在这以前没有编译时和运行时的警告
$DOWARN = 1; # 不是一个内建的变量
# 在这以后打开运行时的警告
warn "\$foo is alive an $foo!"; # 做显示
参阅 use warnings 用法获取警告的词法范围里的控制。参阅 Carp 模块里的 carp 和 cluck 函数获取其他制造警告信息的方法。
write FILEHANDLE
write
这个函数写一条格式化了的记录(可能是多行)到声明的文件句柄,使用和该文件句柄相关联的格式——参阅第七章里的“格式变量”一节。缺省时与文件句柄相关联的格式是和文件句柄同名的那个。不过,一个文件句柄的格式可以在你 select 了该句柄以后修改 $~ 变量来修改:
$old_fh = select(HANDLE); $~ = "NEWNAME"; select($old_fh);
或者说:
use IO::Handle
HANLDE->format_name("NEWNAME");
因为格式是放到一个包名字空间里的,所以如果该 format 是在另外一个包里声明的,那么你可能不得不用该格式的全称:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-28372-30.html
这是教育体制落后的具体体现
因为给脸不要脸