Schrift
[thread]253[/thread]

Warum hängt sich Perl auf? (Seite 2)



<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten
Gast Gast
 2004-05-10 11:27
#2373 #2373
Du arbeitest mit z.B.
$picOptions->[9]
das ist die Dereferenzierung des Feldes 9 aus dem Array @$picOptions, also muß zwangsläufig das erste Feld des Arrays @_ die Referenz auf ein Array enthalten (jedenfalls so wie Du das geschrieben hast).

Was wird denn an die Subroutine übergeben?
Welche Werte befinden sich in @_

Die Variablen:

$shipRolle
$shipMaxi
$shipKompakt
$shipStd

sind nicht deklariert und haben auch keinen Wert; sind das globale Variablen?
renee
 2004-05-10 12:33
#2374 #2374
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@bony: benutzt Du use strict; und use warnings; ??

Normalerweise wird aber ein Fehler ausgegeben, wenn man eine "Nichtreferenz" versucht zu dereferenzieren (wenn man use strict; verwendet!)...
so ungefähr:
Quote
Can't use string ("Hallo") as an ARRAY ref while "strict refs" in use at -e line 1.
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/
bony
 2004-05-10 13:03
#2375 #2375
User since
2004-04-30
18 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ja, ich verwende use strict;.

$picOptions ist die Referenz auf ein 12-stelliges Array, das verschiedene Zahlen enthält (bzw. undef).
An die Sub wird nur diese Referenz übergeben.

Die anderen Variablen sind globale Variablen (Konstanten).\n\n

<!--EDIT|bony|1084180090-->
Crian
 2004-05-10 14:28
#2376 #2376
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
Es gibt eine lose Konvention, globale Variablen mit einem Großbuchstaben anfangen zu lassen. Und wenn es Konstanten sind, use constant. ;-)
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
Gast Gast
 2004-05-10 15:09
#2377 #2377
@bony
hier:
Code: (dl )
elsif ( $picOptions->[ 3 ] || $picOptions->[ 2 ] || $picOptions->[ 1 ] || $picOptions->[ 10 ] || $picOptions->[ 10 ] ) {

verwendest Du $picOptions->[ 10 ] doppelt ...
bony
 2004-05-10 15:14
#2378 #2378
User since
2004-04-30
18 Artikel
BenutzerIn
[Homepage] [default_avatar]
@ Crian
Danke für die Info. Schon wieder was gelernt. Ja, ich weiß, bei mir steht noch ein dickes Buch "Objektorientiert programmieren mit Perl" im Regal, das ich unbedingt mal lesen sollte ;-). Da das alles aber nur ein mehr oder weniger aus der Not geborenes Hobby ist und die Zeit...

@ all:
Einen Teil des Problems habe ich möglicherweise gefunden:
Die Variablen $shippingCosts und $shippingCostsCD werden mit "undef" initialisiert
Code: (dl )
1
2
my $shippingCosts = undef;
my $shippingCostsCD = undef;

Weiter unten werden die Werte der Variablen mit dem >-Oberator verglichen
Code: (dl )
1
2
3
if ( $shippingCostsCD > $shippingCosts ) {
   $total = $total + $shippingCostsCD;
}

Der Vergleich von undef-Werten scheint wohl ein Problem zu sein.

Wenn ich die Variablen mit "0" initialisiere, tritt der Fehler schon seltener auf. Bei manchen "Konstellationen" des Arrays @picOptions tritt der Fehler noch auf. Möglicherweise ist auch hier der Fehler bei den Vergleichsoperationen in calculateShipping() zu suchen, muss ich noch austesten.
renee
 2004-05-10 15:15
#2379 #2379
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
das wird den Fehler aber nicht hervorrufen, denn in der Aussagenlogik gilt nach dem Idempotenzgesetz a oder a = a...
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/
Gast Gast
 2004-05-10 15:29
#2380 #2380
Wenn ein Feld des Arrays nicht vorhanden ist dann tritt der Fehler bei jedem Vergleichsversuch ganz zwangsläufig auf. :)
Vergleichsoperatoren funktionieren nicht wenn sie auf 'undef' angewendet werden.\n\n

<!--EDIT|Dieter|1084188668-->
bony
 2004-05-10 15:57
#2381 #2381
User since
2004-04-30
18 Artikel
BenutzerIn
[Homepage] [default_avatar]
Besten Dank für eure Hilfe. Wenn ich alle entsprechenden Variablen und Felder des Arrays mit 0 initialisiere, funktioniert (fast) alles.
bony
 2004-05-10 16:32
#2382 #2382
User since
2004-04-30
18 Artikel
BenutzerIn
[Homepage] [default_avatar]
Aber warum hängt sich Perl eigentlich erst beim zweiten Durchlauf auf? Solange ich die Vergleiche nur ein mal während des Programmdurchlaufes aufgerufen habe, hat ja alles geklappt (???).
<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten



View all threads created 2004-05-09 17:58.