Schrift
[thread]6883[/thread]

Merkwürdiges Problem mit einer Arrayreferenz



<< |< 1 2 >| >> 20 Einträge, 2 Seiten
Crian
 2005-04-12 11:17
#53694 #53694
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
Ich habe ein sehr sehr eigenartiges Problem mit einer Codestelle, die bei der Bearbeitung einer großen Menge von Daten ab und zu mal "nicht will". Ich kann mir das Problem überhaupt nicht erklären und hoffe, irgendjemand von Euch hat einen Tipp, in welche Richtung ich das Problem suchen soll.

Hier erst mal die Beschreibung: Die Fehlermeldung ist

Code: (dl )
Not an ARRAY reference at ...


und in der betreffenden Zeile steht

Code: (dl )
if ($nr > $#$allmatch) {


Alles klar dachte ich, dann geht wohl in manchen Fällen meine Arrayreferenz $allmatch auf irgendeine Weise kaputt. Also suchte ich und suchte ich, bis ich schließlich vor der obigen Codezeile

Code: (dl )
1
2
3
4
print "Problemstelle: allmatch: ", Dumper $allmatch;
print "nr = [$nr]\n";
print "\$#\$allmatch = [$#$allmatch]\n";
print "ref \$allmatch = ", ref($allmatch), "\n";


einfügte und vor dem Programmabbruch die Ausgabe

Code: (dl )
1
2
3
4
5
6
Problemstelle: allmatch: $VAR1 = [
'10000000 ,'
];
nr = [0]
$#$allmatch = [0]
ref $allmatch = ARRAY


erhielt. Nun bin ich mit meinem Latein aber am Ende, wieviel "mehr" Arrayrefrenz kann denn etwas sein?

Ich habe es auch nochmal mit

Code: (dl )
if ($nr >= scalar @$allmatch) {


versucht, was aber zum selben Abbruch führte.

Ach ja: "This is perl, v5.8.6 built for MSWin32-x86-multi-thread" (ActiveState) auf Windows 2000 Professional.
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 11:23
#53695 #53695
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Code: (dl )
1
2
3
4
# wie waers mit
@{$allmatch}
# oder
$#{$allmatch}
Crian
 2005-04-12 11:28
#53696 #53696
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
Kann mir nicht vorstellen, dass das etwas bringt, aber ich klammere mich an jeden Strohhalm ;)

Edit: Erwartungsgemäß hat das aber nichts gebracht. Das ist ja auch wirklich äquivalent.\n\n

<!--EDIT|Crian|1113290974-->
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 11:31
#53697 #53697
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
bist du sicher, dass es an der stelle ist, und nicht vielleicht woanders?\n\n

<!--EDIT|esskar|1113291090-->
Crian
 2005-04-12 11:31
#53698 #53698
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
Die Codestelle funktioniert ja auch "fast immer" einwandfrei. Und es kann auch kein Problem einer großen Datenmenge und ev. überlaufenden Speichers oder so sein, da das Problem genauso auftritt, wenn ich das Programm auf den isolierten Datensatz, in dem das Problem auftritt, loslasse.
An diesem kann ich auch keine Besonderheit sehen. Und wie gesagt, $allmatch ist ja eine Arrayreferenz, wie Perl selbst zugibt, bevor es das Gegenteil behauptet =)
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 11:34
#53699 #53699
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
kannst du vielleicht ein kleines Beispiel schreiben, dass den fehler reproduziert? bzw. vielleicht mal die daten posten, oder so?
Crian
 2005-04-12 11:44
#53700 #53700
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
Nein, das kann ich leider nicht, da es Firmeninterna sind. Aber ich werd mal schauen, wie weit ich das Programm reduzieren kann. Entweder ich finde auf dem Wege den Fehler oder ich erhalte ein veröffentlichbares Ergebnis, dass das Problem darlegt.

Das kann aber dauern, da das Programm inzwischen sehr komplex ist.
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 11:52
#53701 #53701
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
Sicher ist schonmal, dass sich dieses Programm hier

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/perl
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";

if ($nr > $#$allmatch) {
print "groesser\n";
}
else {
print "kleiner gleich\n";
}


richtig verhält. Es bringt keinen Fehler und sagt artig "kleiner gleich".
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:16
#53702 #53702
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
Interessanter Weise meckert er bei dem Versuch

Code: (dl )
1
2
3
            my $ax = $#$allmatch;
print "ax = [$ax]\n";
if ($nr > $ax) {


wieder in der Zeile mit der if-Abfrage. Aber dort kommt doch überhaupt kein Array mehr vor?
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:22
#53703 #53703
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
Waaah es kommt sogar die gleiche Fehlermeldung ("Not an ARRAY reference at ...") wenn ich an der Stelle

Code: (dl )
if (0) {


schreibe. Da bleibt wohl nur der Schluß, dass es ein Bug in Perl ist. Nun muss ich wohl ein kleinstes lauffähiges Beispiel schnitzen. Und vermutlich ist es ein Fehler, der irgendwo vorher auftritt und von Perl nicht richtig gemeldet wird oder irgendwas in der Art.
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.