我将 UTF-8 编码应用于 STDIN 和 STDOUT。但是,我如何确保将 UTF-8 编码应用于传递给下面代码的文件(如果在命令行上传递文本文件,<> 将从文件而不是 STDIN 读取),只需几行可能的。
use open qw(:std :utf8)
while (<>) {
print;
}
我将 UTF-8 编码应用于 STDIN 和 STDOUT。但是,我如何确保将 UTF-8 编码应用于传递给下面代码的文件(如果在命令行上传递文本文件,<> 将从文件而不是 STDIN 读取),只需几行可能的。
use open qw(:std :utf8)
while (<>) {
print;
}
根据open
pragma 的文档,你已经得到了你想要的行为:
pragma用
open
作为所有 I/O 声明默认“层”(也称为“规程”)的接口之一。在这个 pragma 的词法范围内找到的任何两个参数open
,readpipe
(aka ) 和类似的运算符都将使用声明的默认值。qx//
如果在 MODE 中未指定 IO 层,即使是三参数打开也可能会受到此 pragma 的影响。
perlop文档告诉我们这while (<>) { ... }
相当于
unshift(@ARGV, '-') unless @ARGV; while ($ARGV = shift) { open(ARGV, $ARGV); while (<ARGV>) { ... # code for each line } }