Klaus: Perl / CGI Skript mit Wertübergabe

Mein Problem: Ich möchte mit der URL der Art ".../cgi-bin/script.pl?Variable=WERT" einen Wert in das Perlskript (hier namens "script.pl") übergeben, welches dann per "print"-Befehl einen HTML-Quelltext erzeugt, in dem dann u.a. der Tag <a href="WERT"> ausgegeben wird.

Leider kenne ich mich in Perl selber nicht so gut aus und würde mich über ein komplettes derartiges Skript bzw. einem Hinweis darauf, wo ich es finden kann, sehr freuen.

Vielen Dank.

  1. hi,

    #!/usr/bin/perl -w

    use strict;
    use CGI::Carp qw(fatalsToBrowser);
    use CGI;

    my $q = new CGI;

    my @link = split /=/, $ENV{'QUERY_STRING'};

    print "<a href="$link[1]">afa</a>";

    ob das jetzt funktioniert weiss ich nicht, ich habe es nicht getestet, vielleicht ist ja irgendwo ein schreibfehler drin, sollte aber gehen.

    1. Hi,

      Wieso bindest du erst das CGI-Modul ein, wenn du es dann noch nicht verwendest?

      use strict;
      use CGI::Carp qw(fatalsToBrowser);
      use CGI;

      my $q = new CGI;

      $link=$q->params('link');

      print "<a href="$link[1]">afa</a>";

      Einfache Anführungszeichen im String sind einfacher:

      print "<a href='$link'>foo</a>";

      HTH

      ortenau-s-bahner

      --
      ss:} zu:$ ls:} fo:| de:] va:) ch:? sh:( n4:# rl:? br:> js:| ie:( fl:{ mo:)
      1. Hi,

        Wieso bindest du erst das CGI-Modul ein, wenn du es dann noch nicht verwendest?

        ja stimmt ich hab ausversehen gedacht das ich den link so auslesen muss: $q->param() , aber dann ist mir eingefallen das der link im $ENV{'QUERY_STRING'} gespeichert ist. und so hab ich vergessen das use cgi zu löschen.

        und mit den anführungszeichen " "" ", des hab ich mir so angewöhnt.

  2. Moin,

    Mein Problem: Ich möchte mit der URL der Art ".../cgi-bin/script.pl?Variable=WERT" einen Wert in das Perlskript (hier namens "script.pl") übergeben, welches dann per "print"-Befehl einen HTML-Quelltext erzeugt, in dem dann u.a. der Tag <a href="WERT"> ausgegeben wird.

    kein Problem, den URI:
    /script.pl?Variable=WERT

    kannst du wie folgt parsen:
    use CGI 'param';

    my $value = param('Variable');

    Und der print geht dann so:
    print qq(<a href="$value">);

    Gruss, Rolf

    --
    KnowHow veröffentlichen statt patentieren!
  3. ".../cgi-bin/script.pl?Variable=WERT" einen Wert in das Perlskript (hier namens "script.pl") übergeben, welches dann per "print"-Befehl einen HTML-Quelltext erzeugt, in dem dann u.a. der Tag <a href="WERT"> ausgegeben wird.

    Um CGI Skript zu schreiben solltest du dir das Modul CGI.pm genauer anschauen http://perldoc.com/perl5.8.4/lib/CGI.html, das bietet viele viele Funktionen die man für CGI Programme braucht.

    Deins würde in etwa so aussehen:

    use CGI;
    use strict;

    my $var = CGI::param('Variable');
    my $link = '';

    $link = CGI::a( { -href => $var}, ' linktext') if($var);

    print CGI::header(),
    CGI::start_html(),
    $link,
    CGI::end_html;

    Struppi.

  4. Hallo Leute,

    es ist wirklich sehr nett von Euch, daß Ihr so schnell geantwortet habt.
    Euren Empfehlungen bin ich auch nachgekommen, habe das Modul "CGI.pm" in mein cgi-bin-Verzeichnis gelegt und (da ich ja in Perl absolut nichtwissend bin) mir folgendes Skript (namens link.pl) gebastelt:

    --- Anfang des Skripts ---
    #!/usr/bin/perl -w

    use strict;
    use CGI::Carp qw(fatalsToBrowser);
    use CGI;

    my $q = new CGI;

    $link=$q->params('link');

    print "<a href='$link'>foo</a>";
    --- Ende des Skripts ---

    Wenn ich dann die URL der Art ".../cgi-bin/link.pl?link=WERT" eingebe, spuckt mein Browser (bzw. der Server) aber nur folgende Fehlermeldung aus:

    --- Beginn der Fehlermeldung ---
    Software error:
    Global symbol "$link" requires explicit package name at link.pl line 9.
    Global symbol "$link" requires explicit package name at link.pl line 11.
    Execution of link_a.pl aborted due to compilation errors.
    --- Ende der Fehlermeldung ---

    Was mache ich falsch? Könntet Ihr so nett sein, und für mich eine DAU-gerechte (DAU = dümmster anzunehmender User) Lösung anbieten.

    Vielen Dank.

    1. Hallo Klaus.

      [...]
      use strict;
      [...]
      $link=$q->params('link');
      Was mache ich falsch?

      Siehe: http://www.perldoc.com/perl5.8.4/lib/strict.html

      Freundschaft!
      Siechfred

    2. es ist wirklich sehr nett von Euch, daß Ihr so schnell geantwortet habt.
      Euren Empfehlungen bin ich auch nachgekommen, habe das Modul "CGI.pm" in mein cgi-bin-Verzeichnis gelegt und (da ich ja in Perl absolut nichtwissend bin) mir folgendes Skript (namens link.pl) gebastelt:

      Naja, ich hatte dir ein laufertiges Beispiel schon gegeben. Das CGI Modul ist 100%ig schon bei deinem Perl dabei. schau mal in die verzeichnisse:
      [Perl Verzeichniss]/lib oder
      [Perl Verzeichniss]/site/lib

      Das sind alle Module deiner Version.

      Das CGI Modul ist übriges wesentlich mächtiger und nur zum Parameter abfragen viel zu schade und zu groß (es ist >200 KB groß). Ich hatte dir auch einen Link auf die Doku gezeigt.

      Nochmal mein CGI- skript (mein kleinen Ergänzungen) läuft tadelos durch:
      use CGI qw/-no_debug -no_xhtml/;
      use strict;

      my $var = CGI::param('Variable');
      my $link = '';

      $link = CGI::a( { -href => $var}, ' linktext') if($var);

      print CGI::header(),
      CGI::start_html(),
      $link,
      CGI::end_html();

      Struppi.