Initialisierungstest für variable
ritschmanhard
- perl
Hallo da draussen!
Ich hab da ein (wahrscheinlich) einfaches Problem, finde aber keine Lösung (und es fehlen mir gute Suchbegriffe).
Ich habe ein cgi, das ich von verschiedenen Formularen aus aufrufe.
Allerdings sind nicht in jedem Formular alle Parameter enthalten, die das CGI akzeptiert:
(Auszug CGI:)
my $Input="";
my %logdifs = ();
read(STDIN, $Input, $ENV{'CONTENT_LENGTH'});
my @parameters = split(/&/, $Input);
for (@parameters)
{
my ($name, $value) = split(/=/. $_);
$logdifs{$name}=$value;
}
my $wert1 = $logdifs{"wert1"};
my $wert2 = $logdifs{"wert2"};
...
Es kann also sein, dass es z.B. kein $logdifs ("wert2") gibt; logischerweise mault dann der Apache beim Zugriff auf wert2: "uninitialised value...";
nun dacht ich, mit Folgendem wäre das gelöst:
$logdifs{wert2}?wert2=$logdifs{"wert2"}:wert2="";
Aber: enthält $logdifs{wert2} z.B. %2F, so erhalte ich nun als wert2 einen Leerstring.
Aber wie kann ich denn sonst prüfen, ob $logdifs{wert2} "existiert"?
Schonmal Danke für's lesen,
Richard
Hi,
Ich hab da ein (wahrscheinlich) einfaches Problem, finde aber keine Lösung (und es fehlen mir gute Suchbegriffe).
Wenn du das vorhast was ich denke machst du es dir viel zu kompliziert.
Warum benutzt du nicht das CGI-Modul von Perl?
Hier ein Beispiel:
#!/usr/local/bin/perl -w
use strict;
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
print header();
# param ohne Argument listet die Namen aller Argumente,
# die an das Script uebergeben wurden
my @alleParameter = param() || 'Es wurden keine Argumente uebergeben!';
print "Alle uebergebenen Parameter: @alleParameter<br>\n";
my $testVar = param('fuenf');
if(defined($testVar))
{
print "testVar ist definiert: $testVar<br>\n";
}
my $testVar2 = param('sieben') || '';
if(defined($testVar2))
{
print "testVar2 ist definiert: $testVar2<br>\n";
}
mfG,
steckl
Hi steckl!
Erstmal Danke für die Antwort; aber ich hab da zwei Folgeprobleme:
1. Es kann bei mir sein, dass ein Bezeichner mehrfach in einem Formular vorkommt (identisches name attribut im Input...); das krieg ich mit dem neuen Ansatz nicht gebacken;
2. Hab ich defined direkt auf den String "%2D" losgelassen - und siehe da, das ist laut meiner Mühle dann kein definierter String?!
Weiter nach Lösungen grübelnd,
Richard
Hi,
- Es kann bei mir sein, dass ein Bezeichner mehrfach in einem Formular vorkommt (identisches name attribut im Input...); das krieg ich mit dem neuen Ansatz nicht gebacken;
Wenn du param() im Listenkontext aufrufst bekommst du eine Liste aller Werte, die zu dem Namen gehoeren.
also z.B. my @alleMitNameEins = param('Eins');
Siehe Selfhtml oder CPAN.
- Hab ich defined direkt auf den String "%2D" losgelassen - und siehe da, das ist laut meiner Mühle dann kein definierter String?!
Das versehe ich nicht.
Kannst du mal zeigen, wie du dein cgi-Script aufgerufen hast und wie du ueberpruefst ob der String definiert ist?
mfG,
steckl
Hi steckl!
Vielen Dank für die Hilfe. Ich hab das Alles in den Griff bekommen:
1. bin ich über defined auf exists in meinem Kamelbuch gekommen...
2. (self quote): $logdifs{"wert2"}?$wert2 = $logdifs{"wert2"} : $wert2="";
Dies war falsch; richtig: $wert2=exists $logdifs{"wert2"} ? $logdifs{"wert2"} : "";
Wenn du param() im Listenkontext aufrufst bekommst du eine Liste aller Werte, die zu dem Namen gehoeren.
Der Tip ist echt gut, kann ich sicher noch gebrauchen.
THX a lot,
Richard
Hallo steckl!
my $testVar = param('fuenf');
if(defined($testVar))
{
print "testVar ist definiert: $testVar<br>\n";
}
Kürzer:
print "testVar ist definiert: $testVar<br>\n" if defined $testVar;
Viele Grüße aus Frankfurt/Main,
Patrick
Hi,
my $testVar = param('fuenf');
if(defined($testVar))
{
print "testVar ist definiert: $testVar<br>\n";
}Kürzer:
print "testVar ist definiert: $testVar<br>\n" if defined $testVar;
Du magst wohl keine Klammern? ;-)
mfG,
steckl
Hallo steckl!
print "testVar ist definiert: $testVar<br>\n" if defined $testVar;
Du magst wohl keine Klammern? ;-)
Ja, ist immer so eine Fingerverrenkung ;) Abgesehen davon, liest es sich so besser: Gib das aus wenn Bedingung wahr.
Viele Grüße aus Frankfurt/Main,
Patrick
Hi,
Du magst wohl keine Klammern? ;-)
Ja, ist immer so eine Fingerverrenkung ;)
Wenn du ne amerikanische Tastatur hast geht das schon :-)
mfG,
steckl