Switch parsing mit -s
am 09.05.2006 21:38:28 von Peter Velan
Hallo,
ich möchte dem Skript 'mex' ein Paar Optionsschalter mitgeben und dann
Daten, die über eine Pipe kommen verarbeiten.
--- Skript 'mex' ---
#! /usr/bin/perl -w -s
#
use strict;
# Verabeitung der Pipe-Daten
#
open (MAIL, "> outfile")
or die ("couldn't open $outfile for writing: $!\n");
while( <> ) {
print MAIL $_;
}
close (MAIL);
-------------------------
--- Aufruf ---
~$ cat infile | ./mex -aa=par1 -bb=par2 - -
--- Resultat ---
Name "main::aa" used only once: possible typo.
Name "main::bb" used only once: possible typo.
~$
'outfile' ist nun eine Kopie von 'infile', wie gewünscht.
Die beiden Warnungen sind auch ok, da ich $aa und $bb noch nicht
verwendet habe.
Setze ich aber - als Beispiel für den Zugriff auf $aa -- ein:
#------
echo $aa;
#------
gibts diese Antwort:
Variable "$aa" is not imported at mex line 20.
Global symbol "$aa" requires explicit package name at mex line 20.
Execution of mex aborted due to compilation errors.
Wie kann ich an $aa und $bb ran? Wie importiere ich die Schalter?
Grüsse,
Peter
Re: Switch parsing mit -s
am 09.05.2006 21:57:49 von Peter Velan
am 2006-05-09 21:38 schrieb Peter Velan:
> Hallo,
>
> ich möchte dem Skript 'mex' ein Paar Optionsschalter mitgeben und dann
> Daten, die über eine Pipe kommen verarbeiten.
>
>
> --- Skript 'mex' ---
>
> #! /usr/bin/perl -w -s
> #
> use strict;
>
> # Verabeitung der Pipe-Daten
> #
> open (MAIL, "> outfile")
> or die ("couldn't open $outfile for writing: $!\n");
> while( <> ) {
> print MAIL $_;
> }
> close (MAIL);
>
> -------------------------
>
> --- Aufruf ---
>
> ~$ cat infile | ./mex -aa=par1 -bb=par2 - -
>
>
> --- Resultat ---
>
> Name "main::aa" used only once: possible typo.
> Name "main::bb" used only once: possible typo.
> ~$
>
>
> 'outfile' ist nun eine Kopie von 'infile', wie gewünscht.
> Die beiden Warnungen sind auch ok, da ich $aa und $bb noch nicht
> verwendet habe.
>
> Setze ich aber - als Beispiel für den Zugriff auf $aa -- ein:
>
> #------
> echo $aa;
Ujala, natürlich nicht 'echo' - so ein Blödfug! Aber auch mit dem
richtigen 'print' gibt es die selbe Fehlermeldung.
> #------
>
> gibts diese Antwort:
>
> Variable "$aa" is not imported at mex line 20.
> Global symbol "$aa" requires explicit package name at mex line 20.
> Execution of mex aborted due to compilation errors.
>
> Wie kann ich an $aa und $bb ran? Wie importiere ich die Schalter?
>
> Grüsse,
> Peter
Re: Switch parsing mit -s
am 09.05.2006 22:14:21 von Frank Seitz
Peter Velan wrote:
> Wie kann ich an $aa und $bb ran? Wie importiere ich die Schalter?
In Deinem Code fehlt die Vereinbarung der Variablen mit our,
also sowas wie
our ($aa, $bb);
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: Switch parsing mit -s
am 09.05.2006 22:35:48 von Peter Velan
am 2006-05-09 22:14 schrieb Frank Seitz:
> Peter Velan wrote:
>
>> Wie kann ich an $aa und $bb ran? Wie importiere ich die Schalter?
>
> In Deinem Code fehlt die Vereinbarung der Variablen mit our,
> also sowas wie
>
> our ($aa, $bb);
Ja, Danke!
Habe soeben noch versucht umständlich mit
my $aaa = $main::aa;
my $bbb = $main::bb;
weiterzukommen (was auch funktioniert hat) aber our() siehts viel netter
aus :-)
Gruß,
Peter
Re: Switch parsing mit -s
am 09.05.2006 22:36:40 von Slaven Rezic
Peter Velan writes:
> Hallo,
>
> ich möchte dem Skript 'mex' ein Paar Optionsschalter mitgeben und dann
> Daten, die über eine Pipe kommen verarbeiten.
>
>
> --- Skript 'mex' ---
>
> #! /usr/bin/perl -w -s
> #
> use strict;
[...]
>
> gibts diese Antwort:
>
> Variable "$aa" is not imported at mex line 20.
> Global symbol "$aa" requires explicit package name at mex line 20.
> Execution of mex aborted due to compilation errors.
>
> Wie kann ich an $aa und $bb ran? Wie importiere ich die Schalter?
>
Je nach Perl-Version kannst du "our" oder "use vars" verwenden. Oder
du verwendest gleich Getopt::Long oder ein ähnliches Modul statt der
-s-Option.
Gruß,
Slaven
--
Slaven Rezic - slaven rezic de
tknotes - A knotes clone, written in Perl/Tk.
http://ptktools.sourceforge.net/#tknotes
Re: Switch parsing mit -s
am 10.05.2006 00:03:37 von Peter Velan
am 2006-05-09 22:36 schrieb Slaven Rezic:
> Peter Velan writes:
>
>> Hallo,
>>
>> ich möchte dem Skript 'mex' ein Paar Optionsschalter mitgeben und dann
>> Daten, die über eine Pipe kommen verarbeiten.
>>
>>
>> --- Skript 'mex' ---
>>
>> #! /usr/bin/perl -w -s
>> #
>> use strict;
> [...]
>>
>> gibts diese Antwort:
>>
>> Variable "$aa" is not imported at mex line 20.
>> Global symbol "$aa" requires explicit package name at mex line 20.
>> Execution of mex aborted due to compilation errors.
>>
>> Wie kann ich an $aa und $bb ran? Wie importiere ich die Schalter?
>>
>
> Je nach Perl-Version kannst du "our" oder "use vars" verwenden. Oder
> du verwendest gleich Getopt::Long oder ein ähnliches Modul statt der
> -s-Option.
Danke, bin schon auf dem richtigen Weg, "our" war das was zum meinem
Glück fehlte.
.... und ab gehts in die Haja,
Peter
Re: Switch parsing mit -s
am 15.05.2006 12:57:08 von Ferry Bolhar
Peter Velan:
> Habe soeben noch versucht umständlich mit
>
> my $aaa = $main::aa;
> my $bbb = $main::bb;
> weiterzukommen (was auch funktioniert hat)
Das ist ziemlich genau das, was "our" intern macht - es legt für die
genannten
globalen Variablen einen lexikalischen Alias an.
our $a;
entspräche
my *a = \$a;
wenn es lexikalische Typeglobs gäbe - aber die gibt's eben nicht,weil
lexikalische Variable nicht im Namenstabellen stehen. Lexikalische Aliases
hingegen gibt es (seit Perl 5.6) schon.
> aber our() siehts viel netter aus :-)
Klar, deswegen hat man es ja auch implementiert.
LG, Ferry
--
Ing. Ferry Bolhar
Municipality of Vienna, Department 14
A-1010 Vienna / AUSTRIA
E-mail: bol@adv.magwien.gv.at