什么是Perl的IO :: File相当于open($ fh,">:utf8",$ path)?

时间:2017-02-10 17:52:38

标签: perl utf-8

可以将utf-8编码的文件白化如下:

open my $fh,">:utf8","/some/path" or die $!;

如何使用IO :: File获得相同的结果,最好是一行? 我得到了这个,但是它做了同样的事情,它可以在一行中完成吗?

my $fh_out = IO::File->new($target_file, 'w');
$fh_out->binmode(':utf8');

作为参考,脚本如下所示:

use 5.020;
use strict;
use warnings;
use utf8;
# code here

3 个答案:

答案 0 :(得分:4)

我建议试试Path::Tiny。例如,打开并写出您的文件

use Path::Tiny;

path('/some/path')->spew_utf8(@data);

来自文档,spew, spew_raw, spew_utf8

  

以原子方式将数据写入文件。 [...]
  spew_raw类似于spew,其binmode为:unix,用于快速,无缓冲的原始写入。

     

spew_utf8spew类似binmode :unix:encoding(UTF-8)(或PerlIO::utf8_strict)。如果安装了Unicode::UTF8 0.58+,则会对使用Unicode::UTF8编码的数据执行原始支出。

该模块集成了许多用于处理文件和目录,路径和内容的工具。它通常是简单的调用,如上面的,但也有方法链接,递归目录迭代器,回调挂钩等。整个,一致和周到处理边缘情况的错误处理,输入/输出句柄上的flock,它自己的异常的小而有用的类...参见文档。

答案 1 :(得分:3)

是的,你可以do it in one line

  

open接受一个,两个或三个参数。使用一个参数,它只是内置打开功能的前端。使用两个或三个参数时,第一个参数是可以包含空格或其他特殊字符的文件名,第二个参数是打开模式,可选地后跟文件权限值。

     

[...]

     

如果给IO :: File :: open一个包含:字符的模式,它会将所有三个参数传递给三参数open运算符。

所以你就这样做了。

my $fh_out = IO::File->new('/some/path', '>:utf8');

它与您的第一个open行相同,因为它会被传递。

答案 2 :(得分:-1)

修改 如果不鼓励使用

,您也可以使用File::Slurp

e.g

use File::Slurp qw(write_file);

write_file( 'filename', {binmode => ':utf8'}, $buffer ) ;
  

write_file的第一个参数是文件名。下一个论点是   一个可选的哈希引用,它包含可以修改的键/值   write_file的行为。参数列表的其余部分是数据   写入文件。

不使用的一些好理由?