【发布时间】:2011-03-11 07:08:27
【问题描述】:
我正在对 STDIN 和 STDOUT 应用 UTF-8 编码。但是,我如何确保将 UTF-8 编码应用于传递给下面代码的文件(如果在命令行上传递文本文件, 将从文件而不是 STDIN 读取),只需几行可能。
use open qw(:std :utf8)
while (<>) {
print;
}
【问题讨论】:
标签: perl utf-8 filehandle
我正在对 STDIN 和 STDOUT 应用 UTF-8 编码。但是,我如何确保将 UTF-8 编码应用于传递给下面代码的文件(如果在命令行上传递文本文件, 将从文件而不是 STDIN 读取),只需几行可能。
use open qw(:std :utf8)
while (<>) {
print;
}
【问题讨论】:
标签: perl utf-8 filehandle
根据open pragma 的文档,你已经得到了你想要的行为:
openpragma 用作为所有 I/O 声明默认“层”(也称为“学科”)的接口之一。在此 pragma 的词法范围内找到的任何两个参数open、readpipe(又名qx//)和类似运算符都将使用声明的默认值。如果在 MODE 中未指定 IO 层,即使是三参数打开也可能会受到此 pragma 的影响。
perlop 文档告诉我们while (<>) { ... } 相当于
unshift(@ARGV, '-') unless @ARGV; while ($ARGV = shift) { open(ARGV, $ARGV); while (<ARGV>) { ... # code for each line } }
【讨论】:
ARGV 文件句柄。 open pragma 的文档中引用的摘录指定它适用于 all I/O。