Perl Funktion mit <a href> aufrufen
doe
- perl
0 Christoph Schnauß
Hallo!
Ich habe eine Frage:
ist es möglich in einem Perl Script das eine Html Seite erzeugt einen Link einzufügen der eine weitere Funktion in den PerlScript aufruft?
Ich stelle mir das ungefähr so vor:
<a href='.printEdit().'>Funktion aufrufen</a>
wobei printEdit() die Funktion wäre die aufgerufen werden soll.
Natürlich funktioniert das nicht.
Gibt es da eine Möglichkeit das so zu tun?
Oder hat jemand einen anderen Vorschlag das zu machen?
gruss
doe
hallo,
ist es möglich in einem Perl Script das eine Html Seite erzeugt einen Link einzufügen der eine weitere Funktion in den PerlScript aufruft?
Ja. Allerdings nicht so, wie du dir das vorstellst. Du kannst an ein Perl-Script Argumente übergeben in der Form
<a href="scriptname.pl?argument">Funktion aufrufen</a>
Natürlich muß dein Script in der Lage sein, solche Argumente zu verarbeiten. Beispielsweise in der Form
if ($ENV{'QUERY_STRING'} eq 'argument') {subroutine($cgi);}
Grüße aus Berlin
Christoph S.
Danke für die Antwort, das hört sich genau nach dem an was ich will.
Damit ich das richtig verstanden habe:
<a href="scriptname.pl?argument">Funktion aufrufen</a>
Hier rufe ich mit dem Link ein Perl script auf dem eine Variable als Argument übergeben wird.
if ($ENV{'QUERY_STRING'} eq 'argument') {subroutine($cgi);}
mit $ENV vergleiche ich das Argument und wenn die If Bedingung erfüllt ist wird eine Funktion aufgerufen.
Genau das was ich will.
Besten Dank.
Eine Frage noch, anstatt von $cgi kann ich doch an die Subroutine eine andere variable übergeben oder ist das hier speziell von bedeutung.
gruss
doe
hallo,
if ($ENV{'QUERY_STRING'} eq 'argument') {subroutine($cgi);}
mit $ENV vergleiche ich das Argument und wenn die If Bedingung erfüllt ist wird eine Funktion aufgerufen.
So ist es. Allerdings solltest du genauer von "Subroutine" sprechen, und nicht von Funktion.
Eine Frage noch, anstatt von $cgi kann ich doch an die Subroutine eine andere variable übergeben oder ist das hier speziell von bedeutung.
Ja, das ist hier "speziell von bedeutung". Es funktioniert nur dann in dieser Form, wenn das Script zur Anzeige von HTML gezielt und konsequent das CGI-Modul nutzt. Das heißt, in einem Beispielscript muß dann sehr weit am Anfang irgendwie sowas stehen:
use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
my $cgi = new CGI;
Ob die Variable selbst tatsächlich $cgi genannt wird, ist unerheblich, sie könnte auch $stinkstiefel heißen. Hauptsache, sie wird als "new CGI" deklariert.
Grüße aus Berlin
Christoph S.
Super, das funktioniert genauso wie ich mir das vostelle.
Tausend dank!
Allerdings noch ein kleines Problem:
($ENV{'QUERY_STRING'}
beinhaltet ja alle variablen die ich übergebe.
Das sieht dann z.B. so aus:
variable1?variable2
wenn ich mir die ($ENV{'QUERY_STRING'} in dem neuen script ausgeben lasse.
Gibt es eine methode wie ich diesen String in die einzelnen Variablen zerlegen kann?
ich tüftle da mit regulären ausdrücken herum, aber das hab ich nie so richtig kapiert.
Gibts da nen Standard Reg.Ausdruck?
gruss
doe
Hat sich erledigt!
Mit dem Ausdruck:
$argument =~ s/([\d])?//g;
krieg ich die beiden Argumente die ich will.
Falls es trotzdem eine andere (standard) methode gibt bin ich für jede hilfe dankbar.
tausend dank nochmal für die schnelle hilfe.
gruss
doe
hallo doe,
Mit dem Ausdruck:
$argument =~ s/([\d])?//g;
krieg ich die beiden Argumente die ich will.
Dann warst du jetzt schneller als ich nochmal antworten konnte.
Falls es trotzdem eine andere (standard) methode gibt bin ich für jede hilfe dankbar.
Sagen wirs mal so: ich wüßte nicht, daß es überhaupt irgendeine "Standard-Methode" gibt. Das einzige, was wahrscheinlich gar nicht anders lösbar ist, ist das Übernehmen des "Query-String" in eine Variable. _Was_ da übergeben wird, und _wie_ du es weiterverarbeiten möchtest, ist deine individuelle Angelegenheit.
Reguläre Ausdrücke sind tatsächlich das beste Instrument, um so einen String zu "zerlegen".
tausend dank nochmal für die schnelle hilfe.
Och, 982 hätten auch gereicht, ich kann nicht bis tausend zählen ... *g*
Grüße aus Berlin
Christoph S.
Hallo doe,
variable1?variable2
wenn ich mir die ($ENV{'QUERY_STRING'} in dem neuen script ausgeben lasse.
Gibt es eine methode wie ich diesen String in die einzelnen Variablen zerlegen kann?
wenn ich dich richtig verstanden habe, könnte das CGI Modul für dich ganz praktisch sein:
Fetching the parameter list as a hash
Gruß,
Benne
Tag doe.
Danke für die Antwort, das hört sich genau nach dem an was ich will.
Da hätte ich vielleicht noch was für dich:
http://sniplets.anaboe.net/cgiperl02.html
Siechfred