Schrift
[thread]9042[/thread]

Fehlermeldungen abfangen/unterdrücken: Use of uninitialized value in concatenat (Seite 2)

Leser: 2


<< |< 1 2 >| >> 18 Einträge, 2 Seiten
renee
 2007-05-29 02:31
#77004 #77004
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dann kann es ja nicht funktionieren. In $match steht nur etwas, wenn in $input etwas mit einem Punkt ('.') steht. Da - egal ob 11 oder ll - der Punkt fehlt, ist $match undef und somit bekommst Du die Warnung!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pq
 2007-05-29 12:01
#77005 #77005
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
[quote=Duff,27.05.2007, 17:16]
Code: (dl )
 31                 my ($match) = $input =~ /\.(.+?)\./ if defined $input;
[/quote]
niemals sowas machen.
besser:
my ($match) = defined $input ? $input =~ /\.(.+?)\./ : undef;
eine variablendeklaration mit nachgestelltem if ist in perl unvorhersagbares
verhalten (es ist ja auch nicht dokumentiert).
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pq
 2007-05-29 12:03
#77006 #77006
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
[quote=Duff,28.05.2007, 10:53]Sorry, aber die Variablen deklariere ich natürlich schon zu Beginn des Skriptes.[/quote]
ronnie sagte, wenn $input nicht definiert ist. er sagte nicht "deklariert".
da gibt es einen unterschied.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Duff
 2007-05-29 14:34
#77007 #77007
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Mmh...

habe es im Skript jetzt so abgeändert:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 23 # Funktion zum Ueberpruefen, ob die gewuenschte DB auch konfiguriert ist
24 #
25 sub check {
26 $input=shift;
27 if($input eq '') {
28 print "Es wurde keine DB zum Connecten angegeben!\n";
29 exit 1;
30 } else {
31 #my ($match) = $input =~ /\.(.+?)\./ if defined $input;
32 my ($match) = defined $input ? $input =~ /\.(.+?)\./ : undef;
33 $host="www.$match.de";
34 if ($hash{$match}) {
35 connect_to_db($host,$hash{$match}[0], $hash{$match}[1], $hash{$match}[0]);
36 }
37 }
38 }


Bekomme aber bei einer Eingabe, die nicht mit einer der Werte im Hash übereinstimmt, folgende Fehlermeldung:
Code: (dl )
1
2
3
4
5
6
Konfigurierten DB's, zu denen eine Verbindung aufgebaut werden kann:
www.domain1.de
www.domain2.de
Bitte eine der oben aufgeführten DB's auswählen: ll
Use of uninitialized value in concatenation (.) or string at /home/daniel/scripts/select_db.pl line 33, <STDIN> line 1.
Use of uninitialized value in hash element at /home/daniel/scripts/select_db.pl line 34, <STDIN> line 1.
D'OH
Daniel
PerlProfi
 2007-05-29 14:39
#77008 #77008
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Natürlich bekommst du diese Meldung, weil $match ja undef ist!
Sieh dir mal den code von renee an, da siehst du auch, wie du auf eine falsche Eingabe reagieren kannst.

MfG
Duff
 2007-05-29 14:55
#77009 #77009
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Ups, da habe ich den Beitrag von renee wohl so genau betrachtet.
So funktioniert es. Danke!

Aber wie ist nochmal bitte diese Zeile hier zu verstehen:
Code: (dl )
my ($match) = defined $input ? $input =~ /\.(.+?)\./ : undef;


[edit]
@Admins: Ich bekomme keine Mail-Benachrichtigung mehr!
[/edit]
D'OH
Daniel
renee
 2007-05-29 15:09
#77010 #77010
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Den ternären Operator (?:) kennst Du? Das ist ein verkürztes if-then-else.

if ? then : else

Die obige Zeile ausgeschrieben wäre:
Code (perl): (dl )
1
2
3
4
5
6
7
my $match;
if(defined $input){
    $match = /.../;
}
else{
    $match = undef;
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Duff
 2007-05-29 15:16
#77011 #77011
User since
2006-10-06
283 Artikel
BenutzerIn

user image
Achso.

Das war mir so nicht klar.

Danke für die ausführliche Erklärung!
D'OH
Daniel
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2007-05-27 19:16.