Schrift
[thread]8110[/thread]

Fehlermeldung die nicht da sein duerfte.. (Seite 2)

Leser: 1


<< |< 1 2 >| >> 18 Einträge, 2 Seiten
Strat
 2006-06-26 20:44
#67634 #67634
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Aleks,26.06.2006, 15:00]1) $name muss != undef sein wegen foreach (keys...; außerdem hätte ich dann vorher schon eine warnung kriegen müssen (beim initialisieren).[/quote]
undef ist ein legitimer Wert fuer einen Hashkey...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Aleks
 2006-06-28 14:14
#67635 #67635
User since
2006-06-12
19 Artikel
BenutzerIn
[default_avatar]
Hi!

Habe mal folgendes gemacht um evtl. undef Schlüssel oder Werte zu finden:

Code: (dl )
1
2
3
4
5
6
7
8
   337                  select STDOUT;
338 $|=1;
339 print "=====================================\n";
340 print "name:\t$name\n";
341 print "DNS_ntoa:\t$DNS_Data_ntoa{$name}\n";
342 print "Spectrum:\t$Spectrum_Data_ntoa{$name}\n";
343
344 if ( ($DNS_Data_ntoa{$name} eq $Spectrum_Data_ntoa{$name}) && \


Und als Meldung bekomme ich:
Use of uninitialized value in string eq at ./cstdd.pl line 344 (#1)
(W uninitialized) An undefined value was used as if it were already
defined. It was interpreted as a "" or a 0, but maybe it was a mistake.
To suppress this warning assign a defined value to your variables.

To help you figure out what was undefined, perl tells you what operation
you used the undefined value in. Note, however, that perl optimizes your
program and the operation displayed in the warning may not necessarily
appear literally in your program. For example, "that $foo" is
usually optimized into "that " . $foo, and the warning will refer to
the concatenation (.) operator, even though there is no . in your
program.
---

Ich kotz ins Essen! Das kann doch nicht sein! So wie ich das sehe ist doch nun absolut sicher gestellt das alle Werte definiert sind. Sonst hätte perl doch eine Meldung für die Zeile 340 || 341 || 342 ausspucken müssen. Trotzdem soll einer der Werte im if .. x eq y undef sein. Ich weiß echt nicht mehr weiter..

Die Ausgabe habe ich auch überprüft. In allen Feldern steht etwas drin, nichts ist leer und mittendrin dann eben die Meldung...

Eure Tipps waren bis jetzt ziemlich gut, habt ihr noch mehr davon? Ich habe keine Ahnung was ich hier noch machen soll...
GwenDragon
 2006-06-28 14:27
#67636 #67636
User since
2005-01-17
14598 Artikel
Admin1
[Homepage]
user image
Code: (dl )
344                  if ( ($DNS_Data_ntoa{$name} eq $Spectrum_Data_ntoa{$name}) && \

Was hat denn da der \ zu suchen?
pq
 2006-06-28 15:06
#67637 #67637
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
zeile 344 besagt lediglich, dass der uninitialisierte wert im if vorkommt. aber du hast leider
nur die erste zeile des ifs gepostet; das verräterische && sieht danach aus, als ob da
noch mehr kommt.
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
Aleks
 2006-06-28 15:48
#67638 #67638
User since
2006-06-12
19 Artikel
BenutzerIn
[default_avatar]
*freu*

Da kommt noch der zweite Teil der if Bedingung, allerdings in einer neuen Zeile (deshalb das '\').

Code: (dl )
($DNS_Data_aton{$DNS_Data_ntoa{$name}} eq $Spectrum_Data_aton{$Spectrum_Data_ntoa{$name}}) ){


Und bei einem Testlauf ohne diesen Teil der Bedingung kommt auch die verk.. Meldung nicht mehr. Da ich denselben test für %Spectrum_Data_aton wie für Spectrum_Data_ntoa nutze, muss %DNS_Data_aton das Problem sein. Und jetzt ratet mal welches hash ich als einziges nicht teste.... Da muss ich nun nachbessern!

Ich hätte das Problem nur nicht hier vermutet da es wirklich zwei eigene Zeilen sind (das '\' um das LF zu maskieren), aber perl behandelt sie offensichtlich trotzdem als eine Zeile... Warscheinlich weil sie zur selben Anweisung gehören..

Und wieder was gelernt :D

perl -e'print "Danke!\n" x 1000'
Aleks
pq
 2006-06-28 18:06
#67639 #67639
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
hmm, sagte ich schon vor 2 tagen =)
[quote=pq,26.06.2006, 15:39]das "Use of uninitialized value in string eq" sagt dir:
entweder $DNS_Data_aton{$DNS_Data_ntoa{$name}} oder
$Spectrum_Data_aton{$Spectrum_Data_ntoa{$name}} ist undef.[/quote]
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
Aleks
 2006-06-28 19:35
#67640 #67640
User since
2006-06-12
19 Artikel
BenutzerIn
[default_avatar]
jaaaa, hast ja recht. habs nicht richtig gelesen und dachte du meinst die Zeile drüber... asche..
Crian
 2006-07-03 15:08
#67641 #67641
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Also whitespace ist Perl wurscht, und da der Zeilenvorschub auch dazu gehört, kannst du eine Anweisung auch wild verteilen:

Code: (dl )
1
2
3
4
5
6
7
8
9
if
(
$blubb
==
$bla
)
{
#tuwas
}


nicht, dass das schön oder leserlich wäre....

Aber es spricht nichts gegen

Code: (dl )
1
2
3
4
5
6
7
8
9
if (
$morgen eq 'Scheint die Sonne'
and
$tank eq 'voll'
and
$urlaub eq 'eingereicht'
) {
print "alles super\n";
}
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2006-06-26 17:00.