Andreas: Parameter über SHELL an PERL-Script übergeben

Hallo!

Ich weiß zwar das es geht, leider nicht wie ;-)
Ich möchte einem PERL-Script einen Parameter über die SHELL übergeben. Wie lautet hierfür der Syntax?

sript.pl?id=1234 wäre ja sowas über HTTP, aber ich suche über die SHELL.

script.pl id=1234 ?

und wie steht der Parameter dann im Script selber zu Verfügung?

Viele Grüße
Andreas

  1. Hallo,

    script.pl id=1234 ?

    besser so:
    script.pl 1234

    und wie steht der Parameter dann im Script selber zu Verfügung?

    in dem Array @ARGV
    lies sie z.B. so aus:

    my ($id) = @ARGV;

    Ahoi,
    Kube

    1. Hallo,

      script.pl id=1234 ?

      besser so:
      script.pl 1234

      ach ja, so gehts ja auch mit PHP ;-)

      und wie steht der Parameter dann im Script selber zu Verfügung?

      in dem Array @ARGV
      lies sie z.B. so aus:

      my ($id) = @ARGV;

      Aber ist @ARGV kein Array oder Hash? In PHP mußte man zumindest sowas wie

      $temp = @ARGV;
      $id = $temp[0];

      machen!

      Danke jedenfalls!

      Grüße
      Andreas

      1. Aber ist @ARGV kein Array oder Hash?

        eben dies wollte ich mit der Aussage "...in dem Array @ARGV" andeuten. :-)

        In PHP mußte man zumindest sowas wie
        $temp = @ARGV;
        $id = $temp[0];
        machen!

        Ich bezweifle irgendwie, das es in PHP so funktioniert... in Perl jedenfalls ist dies definitiv nicht zielführend!

        Danke jedenfalls!

        stets zu Diensten,
        Kube

        1. Aber ist @ARGV kein Array oder Hash?
          eben dies wollte ich mit der Aussage "...in dem Array @ARGV" andeuten. :-)

          also ist es ein Array! Also kann man den nicht im String Kontext verwenden, oder was? Denn $id brauche ich im String-Kontext!

          In PHP mußte man zumindest sowas wie
          $temp = @ARGV;
          $id = $temp[0];
          machen!
          Ich bezweifle irgendwie, das es in PHP so funktioniert... in Perl jedenfalls ist dies definitiv nicht zielführend!

          Wieso? Erst den Array in einer Variable Speichern, und dann das erste Element des Array in die Variable $id schreiben, was ist daran nicht zielführend? Wenn ich mehrere Parameter habe stehen dei doch alle in @ARGV, also muß man den String $id doch zunächst aus dem Array holen, oder? Was ist denn wen ich 2 Parameter habe, woher weiß PERL dann das @ARGV den String den ich in $id enthält, udn nur den??? Wo steht der andere Parameter?

          Viele Grüße
          Andreas

          1. Ich bezweifle irgendwie, das es in PHP so funktioniert... in Perl jedenfalls ist dies definitiv nicht zielführend!

            http://www.dclp-faq.de/q/q-php-shell.html

            1. Auf alle Fälle funktioniert es so qwie Du gesagt hast, aber was ist bitte der Unterschied zwischen

              my ($id) =
              und
              my $id =

              ?
              Grüße
              Andreas

              1. Auf alle Fälle funktioniert es so qwie Du gesagt hast, aber was ist bitte der Unterschied zwischen

                my ($id) =
                und
                my $id =

                ?
                Grüße
                Andreas

                also..

                my ($id) = @ARGV;
                schmeisst den ersten Wert des Array @ARGV in die Variable $i

                my $id = @ARGV;
                wertet @ARGV im scalaren Kontext aus, was bedeutet, dass die Anzahl der Arrayelemente an $i übergeben wird.
                Das ist eine erklecklicher Unterschied, findest du nicht?

                Ich habe wie gesagt keine Ahnung von PHP, aber funktioniert das da nicht genauso?

                Gruss,
                Kube

          2. »»holen, oder? Was ist denn wen ich 2 Parameter habe,

            dann läuft das so:
            my ($id, $anderer_parameter) = @ARGV;

  2. Halihallo Andreas

    Ich weiß zwar das es geht, leider nicht wie ;-)
    Ich möchte einem PERL-Script einen Parameter über die SHELL übergeben. Wie lautet hierfür der Syntax?

    sript.pl?id=1234 wäre ja sowas über HTTP, aber ich suche über die SHELL.

    script.pl id=1234 ?

    Neben der Lösung von Kube gibt's noch eine mit dem CGI Modul, dieses hat nämlich auch eine Art Shell-Extension, sodass man CGI-Scripts auf der Shell testen kann:

    Syntax auf der Shell:
    script.pl id=1234

    Script.pl

    use CGI;

    my $cgi = new CGI;

    my $id = $cgi->param('id');

    print $id;

    Viele Grüsse

    Philipp

    1. Hey Philipp!

      sript.pl?id=1234 wäre ja sowas über HTTP, aber ich suche über die SHELL.

      script.pl id=1234 ?

      Neben der Lösung von Kube gibt's noch eine mit dem CGI Modul, dieses hat nämlich auch eine Art Shell-Extension, sodass man CGI-Scripts auf der Shell testen kann:

      Syntax auf der Shell:
      script.pl id=1234

      also doch ;-)

      Script.pl

      use CGI;

      my $cgi = new CGI;

      my $id = $cgi->param('id');

      print $id;

      Das ist mir irgendwie lieber, da so auf alle Fälle zu Zuordnung stimmt. Wenn ich mal mehr als einne PArameter brrauch werde ich das sicher so machen, aber für einen Parameter kann ich denke ich auch noch auf das CGI-Modul verzichten.

      Danke Dir, werde ich sicher auch verwenden können!

      Grüße
      Andreas

      1. Halihallo Andreas ;)

        Syntax auf der Shell:
        script.pl id=1234

        also doch ;-)

        TIMTOWTDI...

        [...]

        Das ist mir irgendwie lieber, da so auf alle Fälle zu Zuordnung stimmt. Wenn ich mal mehr als einne PArameter brrauch werde ich das sicher so machen, aber für einen Parameter kann ich denke ich auch noch auf das CGI-Modul verzichten.

        Ja, für einen Parameter bringt das nix. Du kannst das übrigens auch anders machen:

        test.pl test 1 test2 2

        my %data = @ARGV;

        dann kriegst du über print $data{test2} die '2' als Antwort.

        Oder

        test.pl test=1 test2=2

        my %data;
        foreach (@ARGV) {
           my ($n,$v) = split /=/, $_, 2;
           $data{$n} = $v;
        }

        print $data{test2} kriegst du auch die '2'

        soviel zur "primitiven" Funktionsweise, wie man das auch anders lösen kann, wobei CGI "schöner" ist...

        Viele Grüsse

        Philipp