在我之前的问题中,我询问了编码和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")