[Moscow.pm] STDIN <> и чёрная магия
Mons Anderson
mons на rambler-co.ru
Пт Дек 9 00:48:17 PST 2011
Вообще конечно интересный вопрос.
use PerlIO::scalar ();
или
{ open(my $x,'<',\$data); }
в начале решает проблему в исходном примере.
Но вот то, что open вообще способен сам занять свободный хендл 0 это засада )
Бага #105658
Попробуем пообщаться...
On 09.12.2011, at 12:25, Ruslan Zakirov wrote:
> 2011/12/8 Alexandr Gomoliako <zzz на zzz.org.ua>:
>> Все сводится к тому, что при первой open после закрытия fd 0
>> подгружается PerlIO и соответственно использует первый
>> свободный дексриптор, т.е. fd 0.
>
> Блин. Ну почему это не баг. Еще один прикол из этой серии:
>
> local *STDOUT
> open STDOUT, ...;
>
> system ...
> open my $fh, '|-', ...
>
> Тоже соответственно не работают нормально из-за этого.
>
> Еще в этом направлении. В mod_perl 2, до версии 2.0.5 есть проблема.
> Они закрывают STDOUT и открывают его на /dev/null, но делают это
> "неправильно". Что приводит к тому, что fd #1 остается свободен и его
> получает что-то другое, например БД.
> Как вы понимаете запуск утилиты без перехвата вывода приводит к записи
> в хендл БД мусора и разрыву соединения. Дебажить это было весело.
>
>
>
>
> --
> Best regards, Ruslan.
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
Подробная информация о списке рассылки Moscow-pm