Вообще конечно интересный вопрос.

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 <[email protected]>:
>> Все сводится к тому, что при первой 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
> [email protected] | http://moscow.pm.org

-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить