On 09.12.2011, at 15:50, Dmitry Karasik wrote:
> нашел, все ясно:
>
> 1: open( STDIN, '<', \$data ) делает 'require PerlIO::scalar' - т.е. находит
> этот PerlIO/scalar.pm и читает его черед fd(0). Ну
> читает и слава богу.
Фиг. В моем примере, когда мы не даем закрыть fd 0 такого не происходило-бы.
А все равно происходит.
>
> 2: while(<>) или для простоты readline читает из STDIN, но вот тут и бага -
> он читает не из STDIN а из libc.STDIN_FILENO который 0.
> А он уж занят. Т.е. фикс видимо должен быть где-то в потрохах PerlIO::scalar
> чтобы он правильно переопределял Perl_tied_method("READLINE").
>
> /dk
>
>
> On Fri, Dec 09, 2011 at 12:36:23PM +0100, Dmitry Karasik wrote:
>>> А про open я имел в виду, что при открытии STD* мы можем получить еще
>>> одно-два открытия файлов (тех самых PerlIO + PerlIO::scalar)
>>
>> ну ессно потому что это баг, я в сырцах не рылся но я помню что open
>> открывающий
>> скаляр как файл был сделан на базе PerlIO layers, и скорее всего где-то эта
>> строчка "PerlIO" перекочевала туда куда не надо ...
>>
>> /dk
>
> --
> Sincerely,
> Dmitry Karasik
>
> --
> Moscow.pm mailing list
> [email protected] | http://moscow.pm.org
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org