[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