Можно ли восстановить кодировку для измененного STDIN?

Можно ли восстановить исходную кодировку STDIN, какая кодировка была ранее изменена?

#!/usr/bin/env perl
use warnings;
use strict;

binmode STDIN, ':raw';

# do something here
# ...
# ...

# restore original STDIN encoding
binmode STDIN, $old_encoding;

1 ответ

Не уверен, что это будет работать, но есть :pop псевдокодирование, которое:

удаляет самый верхний слой Дает Perl-коду способ манипулировать стеком слоев. Следует считать экспериментальным. Обратите внимание, что:pop работает только с реальными слоями и не отменяет эффектов псевдо-слоев, таких как:utf8. Примером возможного использования может быть:

open($fh,...)
...
binmode($fh,":encoding(...)");  # next chunk is encoded
...
binmode($fh,":pop");            # back to un-encoded

Необходим более элегантный (и безопасный) интерфейс.

Другие вопросы по тегам