如何检测:utf8 open pragma(或文件句柄的任何转换)?

时间:2011-07-24 14:06:56

标签: perl utf-8

在我的previous question我询问了编码和open pragma的问题。基于@ daxim's answer我想到了另一个问题。

use open qw(:std :utf8);
  • 使用上述open pragma是一个好习惯吗?问,因为我无法保证比一些CPAN包不想做一些IO - 而open pragma会干扰它们。

子的问题:

  • 是否可以在某种程度上检测到,对于给定的流,哪个pragma有效?例如:有可能在某种程度上检测到使用open(:std :utf8) pragma打开STDOUT吗?
  • 更广泛地说,是否可以检测对任何(已打开的)文件句柄应用了哪些转换/(或编码)? (如果是这样,可以确保不进行双重编码。)

Ps:我从tchrit's famous answer学到了很多,但似乎还不够。 ;(

1 个答案:

答案 0 :(得分:3)

您可以使用PerlIO::get_layers来检测分配给文件句柄的图层:

use open qw(:std :utf8);
open my $in, '<', 'somefile' or die "$!"
my @layers = PerlIO::get_layers($in);      # ("unix", "crlf", "utf8")