was bedeutet <=> ?
Alain
- perl
0 Vinzenz0 Christoph Schnauß0 Cheatah0 Daniel Thoma0 Alain0 Christoph Schnauß0 Siechfred0 Daniel Thoma0 Alain
Hallo guten abend,
ich habe keinen schimmer was <=> bedeutet.
Perl gibt einen fehler aus bei dieser sub ausgabe
sub number { $a <=> $b }
die fehler log schreibt
Argument "" isn't numeric in numeric comparison (<=>) at smart.cgi line
aber ohne diesen sub geht mein shop nicht mehr oder nicht mehr richtig.
weiss jemand Rat?
Grüsse
vom Alain
Hallo Alain,
ich habe keinen schimmer was <=> bedeutet.
<=> ist der numerische Vergleichsoperator mit vorzeichenbehaftetem Ergebnis.
Das Pendant für Strings wäre cmp.
<=> bzw. cmp liefern -1 zurück, wenn der linke Operand kleiner als der rechte ist, 0 bei Gleichheit, +1, wenn der linke Operand größer ist als der rechte.
Perl gibt einen fehler aus bei dieser sub ausgabe
sub number { $a <=> $b }
die fehler log schreibt
Argument "" isn't numeric in numeric comparison (<=>) at smart.cgi line
Mit einem numerischen Vergleich kannst Du in Perl keine Zeichenketten vergleichen, nur numerische Werte. Find' ich gut.
Freundliche Grüsse,
Vinzenz
hallo Vinzenz,
<=> ist der numerische Vergleichsoperator mit vorzeichenbehaftetem Ergebnis.
Das Pendant für Strings wäre cmp.
wow, ich dachte bisher, daß ich http://de.selfhtml.org/cgiperl/sprache/operatoren.htm für Version 8.1 unverändert lassen könnte. Es scheint so, als müßte die Liste der dort verzeichneten Operatoren doch noch erweitert werden.
Mit einem numerischen Vergleich kannst Du in Perl keine Zeichenketten vergleichen, nur numerische Werte. Find' ich gut.
Ich auch ;-) Alain ist uns aber die Erläuterung schuldig geblieben, was gerade in $a und $b drinsteht.
Grüße aus Berlin
Christoph S.
Hi,
Alain ist uns aber die Erläuterung schuldig geblieben, was gerade in $a und $b drinsteht.
die Elemente der zu sortierenden Liste, siehe perldoc -f sort.
Cheatah
morgens Cheatah,
die Elemente der zu sortierenden Liste, siehe perldoc -f sort.
grrrrrrr ...
klar doch ;-) Aber was ist, wenn er nun gar keine Liste hat? "Man weiß es ja nicht so genau" würde Stafan Raab sagen. Und du kennst sein Script auch nicht besser als ich.
Grüße aus Berlin
Christoph S.
Hallo Christoph,
Da fehlen noch ein paar andere Operatoren: !~ -> \ ...
Siehe auch perldoc perlop
Grüße
Daniel
hi,
Da fehlen noch ein paar andere Operatoren: !~ -> \ ...
Siehe auch perldoc perlop
<sufz>
Ja, inzwischen hab ich das nachgesehen. Menno, man bekommt ja hier immer mal wieder völlig unerwartet nen <I> übergeholfen, grmpf
</seufz>
Grüße aus Berlin
Christoph S.
hallo Christoph S. un Vincent,
<=> ist der numerische Vergleichsoperator mit vorzeichenbehaftetem Ergebnis.
Das Pendant für Strings wäre cmp.
cmp?Gibts denn eine altenative zu <=> operator?
wow, ich dachte bisher, daß ich http://de.selfhtml.org/cgiperl/sprache/operatoren.htm für Version 8.1 unverändert lassen könnte. Es scheint so, als müßte die Liste der dort verzeichneten Operatoren doch noch erweitert werden.
wäre eine idee :)
Mit einem numerischen Vergleich kannst Du in Perl keine Zeichenketten vergleichen, nur numerische Werte. Find' ich gut.
aber wie erkärst Du Dir das,dass der shop eigentlich einwandfrei funkioniert so,ausser eben dieser einen fehler meldung?
Ich weiss auch nicht genau wo oder auf was $a oder $b sich bezieht,sehe
in dem script nicht mal wo der "sub number" ausgeführt wird.
Ich habe mal das script als text datei hochgeladen
http://www.tramplefun.com/neu/smart.txt
und die confdatei
http://www.tramplefun.com/neu/smartcfg.txt
der "sub number" ist ganz unten vom script.
Grüsse vom
Alain
hallo Alain,
Mit einem numerischen Vergleich kannst Du in Perl keine Zeichenketten vergleichen, nur numerische Werte. Find' ich gut.
aber wie erkärst Du Dir das,dass der shop eigentlich einwandfrei funkioniert so,ausser eben dieser einen fehler meldung?
Wahrscheinlich ist das keine wirkliche Fehlermeldung, sondern eine Warnung. Das heißt, dein Script beachtet _diese_ Angabe nicht, kann aber weiterarbeiten - aber das ist natürlich nur mal so herumgeraten, da wir ja dein Script bisher nicht kennen und du auch keinen exakten log-Auszug gepostet hast.
Grüße aus Berlin
Christoph S.
Привет Alain.
Sag mal, ist das deine Lebensaufgabe, antiquierte Scripte zum fehlerfreien Laufen zu bringen? ;-)
Ich weiss auch nicht genau wo oder auf was $a oder $b sich bezieht
Wie Vinzenz schrieb, auf die zwei nebeneinander liegenden Werte, $a ist dabei der aktuelle, $b der folgende Wert (siehe Perldoc: sort).
Dort wird ein Hash %shipping nach seinen Schlüsseln aufsteigend sortiert und das Ergebnis in den Array @prices geschrieben:
@prices = sort number keys %shipping;
number ist dabei die Referenz auf eine Sortierfunktion, man könnte auch gleich schreiben:
@prices = sort {$a <=> $b} keys %shipping;
Und da ist der Übeltäter, nämlich dieser ominöse Hash (siehe auch perldata):
%shipping = ("",'0.00','1','5.00','3','10.00','5','15.00','7','20.00','10','30.00');
Du siehst, alles Strings, ergo muss bei Verwendung von '<=>' ein Fehler kommen. Warum der Shop trotzdem funktioniert, musst du jetzt aber selber recherchieren :)
Дружба!
Siechfred
Hallo Siechfred,
Wie Vinzenz schrieb, auf die zwei nebeneinander liegenden Werte, $a ist dabei der aktuelle, $b der folgende Wert
Perl wird kaum einen Sortieralgorithmus verwenden, der nur nebeneinander liegende Werte vergleicht, da ein solcher in O(n²) liegt.
Grüße
Daniel
Привет Daniel.
Perl wird kaum einen Sortieralgorithmus verwenden, der nur nebeneinander liegende Werte vergleicht, da ein solcher in O(n²) liegt.
*argh*
Du weißt sicher trotz meines amateuerhaften Beschreibungsversuches, wie ich es gemeint habe.
Дружба!
Siechfred
hallo Siechfred,
Привет Alain.
»»
lernst Du russisch :)
Sag mal, ist das deine Lebensaufgabe, antiquierte Scripte zum fehlerfreien Laufen zu bringen? ;-)
naja sagen wir mal so,ich interessiere mich eben noch für alte
(gibt ja keine vernüftigen neue->oder aber ich habe tomaten auf den augen)
scripts und halt eben perl :)
Wie Vinzenz schrieb, auf die zwei nebeneinander liegenden Werte, $a ist dabei der aktuelle, $b der folgende Wert (siehe Perldoc: sort).
ja hab mir mal angesehen,brachte aber nicht viel jedenfalls nicht mit {$a <=> $b}
Dort wird ein Hash %shipping nach seinen Schlüsseln aufsteigend sortiert und das Ergebnis in den Array @prices geschrieben:
aha
@prices = sort number keys %shipping;
number ist dabei die Referenz auf eine Sortierfunktion, man könnte auch gleich schreiben:
@prices = sort {$a <=> $b} keys %shipping;
hmmm,das dacht ich mir,aber die sub kann doch nicht nur mit "number" aufgerufen werden?
Und da ist der Übeltäter, nämlich dieser ominöse Hash (siehe auch perldata):
%shipping = ("",'0.00','1','5.00','3','10.00','5','15.00','7','20.00','10','30.00');
nach perl doc hab ichs mal so
my %shipping = ('0' => '0.00','1' => '5.00','3' => '10.00','5' => '15.00','7' => '20.00','10' => '30.00');
versucht,aber kein grosser erfolg gehabt,jedoch jetzt gehts auch ohne den <=> sub was mir nun auch keinen error mehr verursacht-keine ahnung warum das jetzt so geht.
habe den unteren teil noch so
if (($itemquant)and($itemquant >= 1)) {
local($low,@prices,$price);
my $price = '5'||'';
@prices = sort keys %shipping;
$low = $prices[0];
foreach $price (@prices) {
if (($price > $low) && ($price <= $totalquant)) {$low = $price};
}
$shipamt = $shipping{$low};
$totalprice += $shipamt............
abgeändert.Komisch so geht alles ohne fehler im errorlog.
Du siehst, alles Strings, ergo muss bei Verwendung von '<=>' ein Fehler kommen. Warum der Shop trotzdem funktioniert, musst du jetzt aber selber recherchieren :)
ja das hab ich ,aber mit hashes hab ich da so meine probleme.
Gut Nacht vom müden
Alain
Привет Alain.
lernst Du russisch :)
Nö, das habe ich 8 Jahre lang getan, nu reicht's :)
hmmm,das dacht ich mir,aber die sub kann doch nicht nur mit "number" aufgerufen werden?
Ja, du kannst sie theoretisch auch number("bla", "fasel", $schwaetz) aufrufen, hat aber keinen Effekt, da die sub weder Übergabewerte erwartet noch irgendwelche verarbeitet. Evtl. kommt eine Warnung oder eine Fehlermeldung, habe ich noch nicht ausprobiert. $a und $b sind übrigens globale Variablen, die im Zusammenhang mit sort() zur Verfügung stehen, da muss nichts an die Funktion übergeben werden. Naja, und eine extra Sortierfunktion brauchst du eigentlich nur für komplexe Sortieraufgaben.
Und da ist der Übeltäter, nämlich dieser ominöse Hash (siehe auch perldata):
%shipping = ("",'0.00','1','5.00','3','10.00','5','15.00','7','20.00','10','30.00');
Ja, der erste Schlüssel des Hashes ist ein leerer String, also m.W. NaN, was bei Verwendung des numerischen Vergleichsoperators zwangsläufig zur Fehlermeldung führen muss (siehe perldoc sort, ganz am Ende). Aber du scheinst das Problem ja hinbekommen zu haben.
Дружба!
Siechfred