BAKKA: @ARGV

Hallihallo ....

ich benutze @ARGV um bei dem Ausfuehren von einem pl -programm die parameter beim Komandozeilenaufruf abzufragen....

programm.pl parameter1 parameter2  usw.

Das klappt ja auch wunderbar, bis auf die ausnahme, wenn man als parameter <!--irgendeintext--> habe, denn das verkraftet mein programm nicht...
ich kann zwar den parameter mit leerzeichen zwischen jedem Zeichen eingeben, und dann im programm die leerzeichen wieder mit
$variable=~ s/ //g;  entfernen, aber das erscheint mir nicht besonders benutzerfreundlich....

gibt es noch eine andere Loesung?

  1. Das klappt ja auch wunderbar, bis auf die ausnahme, wenn man als parameter <!--irgendeintext--> habe, denn das verkraftet mein programm nicht...

    Was genau bedeutet das? Stürzt das Programm ab? Weist es den Parameterwert mehreren Parametern zu?

    ich kann zwar den parameter mit leerzeichen zwischen jedem Zeichen eingeben, und dann im programm die leerzeichen wieder mit
    $variable=~ s/ //g;  entfernen, aber das erscheint mir nicht besonders benutzerfreundlich....
    gibt es noch eine andere Loesung?

    Eigentlich sollte es funktionieren, einem Parameter auch eine Zeichenkette (!) mit Leerzeichen zuzuweisen. Das muß allerdings an der Aufrufstelle entsprechend getan werden - ich halte Dein Problem gar nicht für ein Problem des Perl-Skripts selbst, sondern für ein Problem des Aufrufs.
    Hast Du schon mal versucht, Deinen Parameter mit den vielen Leerzeichen in Gänsefüßchen ("") einzuschließen?

    1. Danke erstma..

      »»  Parameter auch eine Zeichenkette (!)
      aba ich hab mich vielleicht undeutlich ausgedrueckt der parameter ist:
      <!--irgendeintext--> (also mit  "<"  und ">")
      und die fehlermeldung ist:
      "Event not found"
      ich habs ma ausprobiert.. es liegt
      irgendwie an der Kombination von < und !

      ich hab auch ausprobiert den parameter in "" zu setzen, allerdings ohne effekt....
      damit ist zwar meinem programm klar, dass es sich bei dem in "" gesetzten Text um EINEN Parameter handelt, aba es funktioniert trotzdem nicht

      Hoffe auf weitere Vorschlaege

      BAKKA

  2. Hi!

    Das klappt ja auch wunderbar, bis auf die ausnahme, wenn man als parameter <!--irgendeintext--> habe, denn das verkraftet mein programm nicht...

    Bei mir geht das einwandfrei. Ich schaetze, Dein Problem liegt eher auf der Kommandozeile. Die Zeichen < und > dienen naemlich zur Ein-/Ausgabeumlenkung, werden also vom CLI (Command Line Interpreter) interpretiert und nicht einfach als Parameter ans Script uebergeben. Deshalb muss man diese Zeichen vor der Interpretation schuetzen.

    Windows NT: in "" einschliessen
    Unix: in '' einschliessen
    Windows 9x: keine Ahnung

    Dieses kleine Script listet Dir die uebergebenen Parameter auf:
        $i = 0;
        for (@ARGV) {
            print "Argument $i is: '$_'\n";
            $i++;
        }

    Wenn ich es bei mir (WinNT) mit
        perl.exe param.pl 1 "<!--laber-->" 3
    aufrufe, erhalte ich die Ausgabe
        Argument 0 is: '1'
        Argument 1 is: '<!--laber-->'
        Argument 2 is: '3'

    Calocybe

    1. Dieses kleine Script listet Dir die uebergebenen Parameter auf:

      Danke erstma..

      Ich Versuch mich uebrigens auf eier UNIX - Plattform an diesem problem...

      ich hab Dein Skript getestet...
      mit den Parametern "gaga" und "gugu" lief es auch als ich allerdings <!--blabla--> (ich versuchte auch '<!--blabla-->')eingab , warf er
      mich wieder raus

      ...erwarte neue Ideen:)

      BAKKA

      1. hi bakka

        ich  hab das grad mal getestet (linux), mit double-quotes ("<!--blabla-->") kommt dein besagtes Event not found, mit single quotes ('<!--blabla-->') nimmt er es ohne zu meckern...
        das ganze hab ich zwar mit c gemacht, aber damit hat es ja nix zu tun...
        achja, ich nehme übrigens bash, vielleicht ist das ein ansatzpunkt...

        naja bis dann..

        gero

        1. ich  hab das grad mal getestet (linux), mit double-quotes ("<!--blabla-->") kommt dein besagtes Event not found, mit single quotes ('<!--blabla-->') nimmt er es ohne zu meckern...

          Das kann ich (IBM AIX 3.2.5) bestätigen:
          In der Korn-Shell und der Bourne-Shell funktioniert es (mit double quotes).
          Aber in der C-Shell bekomme ich in der Tat "1: Event not found"!

          Scheint also an der Quoting-Methode Deiner Shell zu liegen ...

          1. Hi!

            Aber in der C-Shell bekomme ich in der Tat "1: Event not found"!

            Ja klar! In der C-Shell greift man auf die History mit ! zu. So fuehrt man mit !! das eben ausgefuehrte Kommando nochmal aus, mit !-2 das vorletzte, mit !-3 das vorvorletzte usw. Und !-  (was ja Teil von <!-- ist) bedeutet wohl soviel wie !-0, und das ist das Kommando, das man gerade erst eintippt. Und deshalb ist es noch nicht in der History. Und deshalb wird es nicht gefunden. Und deshalb heisst es "Event not found".

            Jetzt fragt sich nur, wie man das bloede Ding maskiert. Es geht z.B. mit
                ./param.pl 1 <!--laber--> 3
            Hier muessen jetzt auch noch < und > maskiert werden. Ebenfalls moeglich und etwas besser lesbar:
                ./param.pl 1 "<!--laber-->" 3      sowie
                ./param.pl 1 '<!--laber-->' 3

            Unter der Bourne Shell reicht natuerlich ein einfaches
                ./param.pl 1 '<!--laber-->' 3

            Calocybe

            1. Jo..

              Danke.. Der fehler ist mir jetzt klar:

              Die verschiedenen Shells benutzten verschiedene Kommandozeilen interpreter, so Dass ich wohl doch eine abfrage mit STDIN machen muss

              Danke nochma

              BAKKA

              1. Die verschiedenen Shells benutzten verschiedene Kommandozeilen interpreter, so Dass ich wohl doch eine abfrage mit STDIN machen muss

                <Haarespalt> Eine Shell IST der Interpreter. Ich hatte den Begriff CLI nur benutzt, weil man unter WinNT nicht von Shells spricht. </Haarespalt>

                Das mit STDIN halte ich aber fuer den falschen Weg. IMO sollte ein User schon wissen, wie er mit seiner Shell umzugehen hat. Und wenn er mit csh nicht klarkommt, dann soll er doch einfach sh, ksh oder bash eingeben und dann deren Syntax benutzen. Aber naja, musst Du selber wissen.

                Calocybe

              2. Die verschiedenen Shells benutzten verschiedene Kommandozeilen interpreter, so Dass ich wohl doch eine abfrage mit STDIN machen muss

                Wenn Du eine Kommandosequenz hast (auch wenn die nur aus einem einzigen Kommando besteht!), die nur in einer bestimmten Shell funktioniert, dann ist "the UNIX way", diese Kommandosequenz in einer Datei abzuspeichern und in Zeile 1 dieser Datei den Aufruf der entsprechenden Shell einzutragen.
                Also etwa "#! /bin/ksh" oder wie das bei Dir auch immer heißen mag. Das geht nämlich nicht nur in Perl-Skripts ...

          2. Jo..

            Danke.. Der fehler ist mir jetzt klar:

            Die verschiedenen Shells benutzten verschiedene Kommandozeilen interpreter, so Dass ich wohl doch eine abfrage mit STDIN machen muss

            Danke nochma

            BAKKA

        2. achja, ich nehme übrigens bash, vielleicht ist das ein ansatzpunkt...

          ....
          nachtrag, ja daran liegts wohl.
          mit der csh ist genau andersrum, double's funktionieren, single's erzeugen das event-ding

          schau mal, was der für ne shell benutzt

          bis dann
          gero

        3. achja, ich nehme übrigens bash, vielleicht ist das ein ansatzpunkt...

          Guter Ansatzpunkt!!!
          Mit bash nimmt er es jetz auch!!!!

          Danke
          :)

          BAKKA