WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Dringendes Perl-Problem!!! (http://www.wcm.at/forum/showthread.php?t=39095)

SNo0py 10.12.2001 21:55

Dringendes Perl-Problem!!!
 
Hallo! Ich habe ein absolut dringendes Perl-Problem, ich komme einfach nimma weiter... :heul:

Auf http://www.xdream.cc/cgi-bin/homanto/homanto.pl bekomme ich immer einen ominösen Fehler, bei mir am eigenen Server (Apache auf dem lokalen Rechner) funkt aber alles... das gibt es doch nicht?!?!

Der Code:
Code:

open ...                              öffne file
my @data = <FILE>;                    lese daten
close ...                            schließe file wieder

my $c = scalar(@data) - 1;                   
for ( 0 .. $c ) {                    für jedes gelesene Element...
    my $tmp = $data[$_];         
    ... leerzeilen etc. filtern...         

    my @dbset = split(/\|/, $tmp);  aufteilen (|)     

    if($dbset[0] eq ... && ...) {    wenn ... ...         
          delete $data[$_];          Zeile 83...
hier sollte der ganze Datensatz
(sprich die ganze Zeile) gelöscht
werden...
   
          last;                      und raus 
    }

Sinn dahiner: ich öffne ein File, lese es ein, suche nach einer ID (das sind die Abfragen), lösche den Datensatz und schreibe das File wieder raus.

Nur regt sich das Programm schon auf, bevor ich was ausführe und das Programm sollte da gar nicht reingehen, wenn ich keine Parameter angebe... :heul:

kann mir da wer helfen??

_m3 10.12.2001 22:21

IMHO wird $_ irgendwo in Deinem Sourcecode überschrieben und repräsentiert daher nicht mehr Deinen Index.
Lösung: Nutz eine explizite Variable als Index. Z.B.:
for my $idx ( 0 .. $c ) {
my $tmp = $data[$idx];
....
delete $data[$idx];
...

SNo0py 11.12.2001 07:44

Hallo _mp3!

Ich habe den Code gerade ausgebessert und hinaufgeladen (mit $idx usw.), jetzt wird nirgens mehr $_ verwendet. Noch immer der gleiche Fehler... :heul:

Trotzdem thx.!

SNo0py 11.12.2001 07:45

Noch was is mir gerade eingefallen: warum funkts dann bei mir lokal???

Kapier ich nicht...

_m3 11.12.2001 07:57

Was sagt denn ein
print $^V;
???
BTW:
my $c = scalar(@data) - 1;
for ( 0 .. $c ) {
lässt sich eleganter als
for ( 0 .. $#data ) {
schreiben :D

MANX 11.12.2001 07:58

Hi!

Sucht's ihr eh im richtigen script?
Zitat:

Untrapped Error: delete argument is not a HASH element or slice at sources/user.pl line 183
Der Fehler ist in user.pl, nicht in homanto.pl.

Poste halt einen Abschnitt aus user.pl.

Grüße

Manx

_m3 11.12.2001 08:05

Ach Du Sch......
Klassischer Fall von Betriebsblind!
[Hut zieh vor MANX]

SNo0py 11.12.2001 13:23

Hallo!

Der erste Fehler war auf Zeile 83 in events.pl. Nachdem anscheinend $_ verändert wurde, hat das einführen einer Zählvariable $idx funktioniert. Anschließend hat eine ähnliche Routine in user.pl auf Zeile 183 nicht funktioniert :-(

Heute in der Vorlesung hab ich Zeit gehabt, mir das ganze auf dem Psion anzusehen: laut Dokumentation ist die Funktion delete nur für Hashes anwendbar, für Arrays ist splice zu verwenden (splice array, offset, length, list).

Bin gerade am Uploaden, hoffentlich funkt es jetzt!

Auf jeden Fall danke!

_m3 11.12.2001 13:27

Funkt. auch mit Arrays:
Zitat:

Given an expression that specifies a hash element, array element, hash slice, or array slice, deletes the specified element(s) from the hash or array.

SNo0py 11.12.2001 13:33

@_mp3: ich weiß, auf meinem lokalen Rechner funkt es auch mit Arrays, aber auf meinem Provider anscheinend nicht. Mit splice funkt aber alles einwandfrei. Nur die Bilder muss ich noch uploaden, dann ist der Testbetrieb von HoManTo aufgenommen!

Danke auf jeden Fall für die Hilfe!

PS: mit obigen Link wird man auf die Homepage weitergeleitet, um HoManTo zu sehen, bitte !hier klicken :-)


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag