Можно ли восстановить кодировку для измененного 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
Необходим более элегантный (и безопасный) интерфейс.