Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]6883[/thread]

Merkwürdiges Problem mit einer Arrayreferenz (Seite 2)



<< |< 1 2 >| >> 20 Einträge, 2 Seiten
Taulmarill
 2005-04-12 12:28
#53704 #53704
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
konnte den fehler hier nich reproduzieren.
hab ich das denn richtig verstanden, dass das script, welches den fehler ausgibt, in etwa so aussieht?
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use strict;
use warnings;
use Data::Dumper;

my $allmatch = [ '10000000 ,' ];
my $nr = 0;

print "Problemstelle: allmatch: ", Dumper $allmatch;
print "nr = [$nr]\n";
print "\$#\$allmatch = [$#$allmatch]\n";
print "ref \$allmatch = ", ref($allmatch), "\n";

my $ax = $#$allmatch;
print "ax = [$ax]\n";

if ($nr > $ax) {
print "groesser\n";
}
else {
print "kleiner gleich\n";
}
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Crian
 2005-04-12 12:29
#53705 #53705
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Tröööööt tröööööt ich hab den Fehler gefunden. Ich hatte an anderer Stelle ein Array mit Datenstrukturen gebildet, die alle wiederum in einem anonymen Array stecken und in einem seltenen Fall wurden Elemente dieses Arrays nicht mit einem anonymen Array ummantelt. Die Fehlermeldung ist richtig, aber die Zeilenangabe falsch.

Es ist also doch in gewissem Sinne ein Perl-Fehler, und ich sollte versuchen ein kleinstmögliches Beispiel zu basteln. Da ich aber sehr im Streß bin, komme ich dazu im Moment nicht.
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
Taulmarill
 2005-04-12 12:29
#53706 #53706
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
vergewissere dich mal, dass du alle zeilen mit nem semicolon abgeschlossen hast. ansonsten mal nen komplettes script, was den fehler produziert, posten oder besser als file irgendwo hochladen.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Crian
 2005-04-12 12:39
#53707 #53707
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Dieses Programm verdeutlicht das Problem, allerdings tritt es hier nicht auf:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/perl
use strict;
use warnings;

my @c = (
[{ xyz => undef }],
{ xyz => undef },
[{ xyz => undef }],
);

my $d = [ 13, 17, 42, 69, 4711 ];

my $nr = 1;

if ($nr > $#$d) { # Zeile 15
print "schuhu\n";
}
else {
if (defined $c[$nr]->[0]->{xyz}) { # Zeile 19
print "definiert\n";
}
else {
print "nicht definiert\n";
}
}


Hier gibt Perl durchaus zurecht

Code: (dl )
Not an ARRAY reference at R:\Banz\HR_Strukt_HuP\CD\erwent_down\prg\t2.pl line 19.


aus. In meinem Programm kam die Meldung leider bezogen auf die Zeile, die hier der Zeile 15 entspricht.

Naja, to be weitergebastelt... ;-)\n\n

<!--EDIT|Crian|1113295487-->
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
Crian
 2005-04-12 12:47
#53708 #53708
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
[quote=Taulmarill,12.04.2005, 10:29]vergewissere dich mal, dass du alle zeilen mit nem semicolon abgeschlossen hast. ansonsten mal nen komplettes script, was den fehler produziert, posten oder besser als file irgendwo hochladen.[/quote]
Wie gesagt, das ist ziemlich aufwendig, alle kurz gebastelten Programmversionen reproduzieren den Fehler nicht, also muss ich das ganze reduzieren, und das "ganze" ist ziemlich komplex und obendrein darf ich das eh nicht rausgeben.

Ich muss mir mal die Zeit nehmen, es so weit wie möglich runterzukochen, aber die hab ich gerade nicht.

Aber ich komm darauf zurück.
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
esskar
 2005-04-12 13:58
#53709 #53709
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=esskar,12.04.2005, 09:31]bist du sicher, dass es an der stelle ist, und nicht vielleicht woanders?[/quote]
;-)
Crian
 2005-04-12 14:11
#53710 #53710
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
[quote=esskar,12.04.2005, 11:58][quote=esskar,12.04.2005, 09:31]bist du sicher, dass es an der stelle ist, und nicht vielleicht woanders?[/quote]
;-)[/quote]
har har ;-)

Dass der Fehler nicht wirklich in der Zeile war war mir ja auch klar. Aber dass Perl diese Zeilennummer ausgibt ist halt ein Bug.
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
sesth
 2005-04-12 22:51
#53711 #53711
User since
2005-02-01
181 Artikel
BenutzerIn
[default_avatar]
Überprüfe mal Deine Zeilenwechsel (\n) im Programm. Je nach Editor kann es da Diskrepanzen geben. Unter Windows wird ja 0x0D 0x0A verwendet. Unix benötigt nur 0x0A. Beides erkennt Perl unter Windows als Zeilenwechsel. Wenn Du aber Mac Zeilenwechsel (0x0D) verwendest, erkennt Perl keinen Zeilenwechsel. U.u. zeigt Dein Editor aber einen Zeilenwechsel an und Du suchst deshalb an der falschen Stelle.
Gruß
Thomas
pq
 2005-04-13 12:36
#53712 #53712
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
dass perl manchmal im if den fehler anzeigt, obwohl er im if-block auftritt, ist
AFAIK aber ein bekannter fehler.
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
Crian
 2005-04-13 15:46
#53713 #53713
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Auch wenn er im Else-Block auftritt?
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 >| >> 20 Einträge, 2 Seiten



View all threads created 2005-04-12 11:17.