Skriptaufruf mit Parametern
Skriptaufruf mit Parametern
am 12.10.2007 12:25:33 von Ferry Bolhar
Hallo,
wahrscheinlich steh ich auf der Seife und es gibt eine ganz
einfache Lösung, aber ich komm momentan nicht dahinter:
Ich habe ein Skript, nennen wir es a.pl, das soll ein zweites
Skript names b.pl aufrufen. Noch keine große Sache, ein
do 'b.pl';
in a.pl sollte genügen. Allerdings soll a.pl an b.pl Parameter
mitgeben können. Auch gut, dann ginge ja eventuell mit
system 'b.pl', 'Para1', 'Para2';
Nicht schön, weil dadurch ja extra ein neuer Prozess
gestartet werden muss, aber zur Not machbar.
Das Problem ist allerdings, dass b.pl a a.pl etliche Werte
zurückliefern soll, was ich durch die Verwendung globaler
Variable abgedeckt hätte. Das schließt allerdings den
"system"-Ansatz aus. "do" hingegen erlaubt leider nur die
Angabe eines Skriptnamens ohne Parameter (ein
do 'b.pl', 'Para1', 'Para2';
ruft zwar b.pl auf, übergibt aber keine Parameter).
Gibt es hierzu eine Lösung?
Danke & LG,
Ferry
--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at
Re: Skriptaufruf mit Parametern
am 12.10.2007 12:49:29 von Frank Seitz
Ferry Bolhar wrote:
> Ich habe ein Skript, nennen wir es a.pl, das soll ein zweites
> Skript names b.pl aufrufen. Noch keine große Sache, ein
>
> do 'b.pl';
>
> in a.pl sollte genügen. Allerdings soll a.pl an b.pl Parameter
> mitgeben können. Auch gut, dann ginge ja eventuell mit
>
> system 'b.pl', 'Para1', 'Para2';
>
> Nicht schön, weil dadurch ja extra ein neuer Prozess
> gestartet werden muss, aber zur Not machbar.
>
> Das Problem ist allerdings, dass b.pl a a.pl etliche Werte
> zurückliefern soll, was ich durch die Verwendung globaler
> Variable abgedeckt hätte.
Fremde Programme ruft man eigentlich mit system() auf
und kommuniziert mit ihnen per Interprozesskommunikation.
Wenn dein Perl-Programm sich wie ein Modul verhalten kann,
solltest du es - oder die wesentlichen Teile daraus -
auch als Modul gestalten und per Funktions- oder
Methodenaufruf ansprechen. Alles andere hat den Geruch
von verfehltem Design.
Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Re: Skriptaufruf mit Parametern
am 12.10.2007 20:10:08 von Slaven Rezic
"Ferry Bolhar" writes:
> Hallo,
>
> wahrscheinlich steh ich auf der Seife und es gibt eine ganz
> einfache Lösung, aber ich komm momentan nicht dahinter:
>
> Ich habe ein Skript, nennen wir es a.pl, das soll ein zweites
> Skript names b.pl aufrufen. Noch keine große Sache, ein
>
> do 'b.pl';
>
> in a.pl sollte genügen. Allerdings soll a.pl an b.pl Parameter
> mitgeben können. Auch gut, dann ginge ja eventuell mit
>
> system 'b.pl', 'Para1', 'Para2';
>
> Nicht schön, weil dadurch ja extra ein neuer Prozess
> gestartet werden muss, aber zur Not machbar.
>
> Das Problem ist allerdings, dass b.pl a a.pl etliche Werte
> zurückliefern soll, was ich durch die Verwendung globaler
> Variable abgedeckt hätte. Das schließt allerdings den
> "system"-Ansatz aus. "do" hingegen erlaubt leider nur die
> Angabe eines Skriptnamens ohne Parameter (ein
>
> do 'b.pl', 'Para1', 'Para2';
>
> ruft zwar b.pl auf, übergibt aber keine Parameter).
>
> Gibt es hierzu eine Lösung?
>
Setz doch einfach @ARGV;
{
local @ARGV = qw(Para1 Para2);
do 'b.pl';
}
Aber ein Modulansatz wäre schon gescheiter. Letzendlich ist es
meistens nicht schwer, ein Skript in ein Modul zu wandeln, dass
weiterhin als Skript aufrufbar ist:
Früher:
#!perl
use Getopt::Long;
GetOptions(...);
.... things to do ...
__END__
Als Modul:
#!perl
package Modul;
sub process {
local @ARGV = @_;
GetOptions(...);
... things to do ...
}
return 1 if caller;
process(@ARGV);
__END__
Gruß,
Slaven
--
Slaven Rezic - slaven rezic de
Dump a Tk canvas as an xfig file:
http://search.cpan.org/search?mode=module&query=Tk::CanvasFi g