Как определить открытую прагму: utf8 (или любые преобразования для файловых дескрипторов)? - PullRequest
2 голосов
/ 24 июля 2011

В моем предыдущем вопросе я спросил о проблеме с кодировкой и open pragma.На основании @ ответа даксима мне в голову приходят другие вопросы.

use open qw(:std :utf8);
  • Это хорошая практика, используя вышеприведенные open pragma?На вопрос, потому что я не могу гарантировать, что некоторые пакеты CPAN не хотят выполнять некоторые операции ввода-вывода - и open pragma будет мешать им.

подвопросы:

  • Возможнов какой-то мере обнаружить, какая прагма действует для данного потока?Например: возможно ли несколько обнаружить, чем STDOUT открывается с помощью open(:std :utf8) прагмы?
  • в более широком смысле, возможно ли определить, какие преобразования / (или кодировка) применяются для любого (уже открытого) дескриптора файла?(если это так, то можно не получить двойное кодирование.)

Ps: я многому научился из знаменитого ответа tchrit , но пока его недостаточно.; (

1 Ответ

3 голосов
/ 24 июля 2011

Вы можете использовать PerlIO :: get_layers , чтобы обнаружить слои, назначенные дескриптору файла:

use open qw(:std :utf8);
open my $in, '<', 'somefile' or die "$!"
my @layers = PerlIO::get_layers($in);      # ("unix", "crlf", "utf8")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...