reopen STDIN

Jiri Polcar polcar na physics.muni.cz
Úterý Říjen 7 15:53:52 MEST 2003


    Zdravim,

pole @arg, ve kterem mam argumenty pro 'program'. Co ptrebuju je vystup
z 'program'. Nemohu pouzit 

    $program = '/bin/echo';
    @argv    = 'pepa';

    $, = ' ';
    open PIPE, "$program @arg|" or die;

protoze v @arg je (v realu) plno uvozovek, vykricniku, apostrofu a
podobne. Nemuzu to nechat interpretovat shell.

Proto chci zavolat

    open STDOUT, ">file" or die;
    system $program, @arg;

tohle skutecne zpusobi, ze se vystup 'program'u zapise do "file", ktery
si pak muzu precist. Potiz je, ze uz nejsem shopen znovu otevrit
/dev/stdout.

    open STDOUT, ">/dev/stdout" or die;

sice neumre, ale kam se zapise 

    print "pepa\n";

nevim. Napadlo me, ze open(), kdyz dostane otevrenej filehandle, tak ho
nejdriv zavre a pak znovu otevre. Takz kdyz by nekdo (pajou) cetl STDOUT
a najednou by se zavrel, znamenalo by to pro nej konec vstupu. Takze se
to asi musi nejak obejit. Jak? Nebo neco delam spatne?


--
JP


Další informace o konferenci Perl