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