linux-l: Aufruf vom anderen Perl-Script im Perl-Script

Oliver Bandel oliver at first.in-berlin.de
Do Apr 27 19:28:34 CEST 2000


Hi!


On Thu, 27 Apr 2000, Steffen Solyga wrote:

> Dear Manuel Tennert, concerning your mail sent on Thursday, 2000/04/27 12:14
> let me reply the following:
> 
> > Seit geraumer Zeit plage ich mich mit einem "kleineren" Problemchen
> > bezüglich Perl herum. Ich versuche krampfhaft in einem Perlscript andere
> > Perscripte aufzurufen, wobei es eine Eingabe- und auch Ausgabedatei beim
> > Aufruf des Perlscriptes geben soll, die zudem selbst gewählt werden
> > kann....verwirrend, gelle ??
> > Also mein Versuch im Perlscript folgendes einzubinden:
> > 
> > exec("perl.exe seiten.pl $eingabedtaei >$ausgabedatei");
> > 
> > verlief in die Hose, es passiert rein gar nichts.
> > Gibt es da denn eine Möglichkeit !???
> 
> Warum nicht als Unterprogramm? Das würde das Starten eines zusätzlichen
> Interpreters unnötig machen und wäre flexibler. Vor allem kann perl
[...]

Wenn's kein eigenes Programm ist und obendrein noch von
etwas umfangreicherer Bedeutung (also auch von anderen
Scripten/Personen) aufgerufen wird/werden soll, dann
ist doch so ein modularer Ansatz recht gut.
Wär' ja schlimm, wenn man für jede neue Applikation
immer alles fest einbauen müsste...

[...]
> oder wenn Du den output noch parsen willst
> 
> @document = ();
> open( SEITEN, "...\seiten.pl $eingabedtaei |" );
> while( <SEITEN> ) {
>   push( @document, $_ );
> }
> close( SEITEN );
> # mach irgendwas mit dem array, z.B. sortieren
> open( OUT, ">$ausgabedatei$" );
> foreach (@document) {
>   print OUT $_;
> }
> close( OUT );


Warum dann nicht einfach so:

@result = `programmname.pl $eingabedtaei`;


Ist doch viel bequemer. und übersichtlicher auch noch.
Und wozu schreibst Du's dann wieder in die Ausgabedatei,
wenn Du erst ein anderes Konzept vorschlägst?

Und wenn das erste Konzept übernommen werden soll, warum
dann nicht ein system() mit dem bisherigen Aufruf
und danach einfach die Ergebnisdatei öffnen, wenn man
das tatsächlich braucht?!
Man spart sich zumindest den ganzen Krempel mit dem ersten
open() und so...


> 
> 
> Warum Dein obiger Aufruf nicht funktioniert, ist mir nicht so ganz klar,
[...]

Vor einem exec() sollte man schon ein fork() nutzen,
wenn man sich nicht selbst die Stelzen unter den Beinen
wegziehen und in die Jauchegrube fallen will.


Tschüß,
    Oliver


-- 
Tap as Tap can!    1. Internationales        Infos: http://www.germantap.org/
***************    Steptanzfestival Berlin,         specials/2000/istf-01.shtml
                   25. - 27. Mai 2000



Mehr Informationen über die Mailingliste linux-l