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



在我之前的问题中,我询问了编码和open pragma的问题。根据@daxim的回答,我想到了另一个问题。

use open qw(:std :utf8);
  • 使用上述open pragma是一个很好的做法?问,因为我不能确保一些CPAN包不想做一些IO -和open pragma会干扰他们。

潜在:

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

Ps:我从基督的著名回答中学到了很多,但似乎还不够。; (

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

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

最新更新