Switch parsing mit -s

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