1

我将 UTF-8 编码应用于 STDIN 和 STDOUT。但是,我如何确保将 UTF-8 编码应用于传递给下面代码的文件(如果在命令行上传递文本文件,<> 将从文件而不是 STDIN 读取),只需几行可能的。

use open qw(:std :utf8)

while (<>) {
    print;
}
4

1 回答 1

1

根据openpragma 的文档,你已经得到了你想要的行为:

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
     }
   }
于 2010-07-02T21:43:12.767 回答