Leser: 29
QuotePHP verhält sich nicht HTTP konform.
if(0 == 'test'){}
1
2
3
4
5
6
$ perl -E 'say "test" + 0'
0
$ perl -E 'say "123test" + 0'
123
$ perl -E 'say "123test567" + 0'
123
2012-12-27T07:20:47 reneeKaum zu glauben, aber das ist auch in Perl "wahr" ;-)
QuoteArgument "test" isn't numeric in numeric eq (==)
2012-12-27T08:06:45 bianca2012-12-27T07:20:47 reneeKaum zu glauben, aber das ist auch in Perl "wahr" ;-)
Dafür hat man ja strict.
QuoteArgument "test" isn't numeric in numeric eq (==)
2012-12-27T10:56:02 reneeNee, warnings ;-)
2012-12-27T10:56:02 reneeDas Verhalten ist aber in vielen Fällen durchaus wünschenswert, sonst müsste man viele Typecasts machen. Und je nach Anwendungsfall ist das nur überflüssige Arbeit.
2012-12-27T12:00:14 GwenDragonStell dir vor, eine Datenbankfunktion soll im Falle keines Fehlers einen wahren Wert, auch die Anzahl der durchgeführten Änderungen anzeigen.
2012-12-27T12:00:14 GwenDragonSchon mal vom ominösen 0buttrue aka "0 but true" gehört?
Das ist sowohl 0 als auch Wahr.
2012-12-27T12:22:15 GwenDragonUnd wie machst du dass dann bei false?
2012-12-27T12:22:15 GwenDragonUnd wie machst du dass dann bei false?
Returnwerte
bei Erfolg: sowohl true als auch Anzahl der Operationen
bei Misserfolg: false
2012-12-27T12:00:14 GwenDragonSchon mal vom ominösen 0buttrue aka "0 but true" gehört?
Das ist sowohl 0 als auch Wahr.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
#!/usr/bin/perl use 5.008; use strict; use warnings; sub doomsday { my $day = shift || 4711; if ($day == 42) { # Weltuntergang beim 42. Tag! :P return "0 but true"; # Untergang ist wahr, Welt is Null } else { return undef; # false } } print doomsday(42) # Welt kaputt bei 42? ? 'BUMM' : 'W3l7 3xist|3rt n0ch';
2012-12-27T12:43:23 GwenDragonKeine Ahnung wo bei dir Perl meckert.
1
2
3
4
5
6
7
8
9
10
$ perl -Mwarnings -E 'say "123test" + 5'
Argument "123test" isn't numeric in addition (+) at -e line 1.
128
$ perl -Mwarnings -E 'say "0 but true" + 5'
5
$ perl -Mwarnings -E 'say "0 but true" == 0'
1
$ perl -Mwarnings -E 'say "123test" == 123'
Argument "123test" isn't numeric in numeric eq (==) at -e line 1.
1
2012-12-29T14:17:07 GwenDragonIch wollte wissen, wo du in der Praxis glaubst, dass die Verwendung von '0E0' oder '0 but true' Perl veranlasst Warnungen zu werfen.
2012-12-29T14:17:07 GwenDragonUnd wieso und wo muss ich numerische und alfanumerische Werte vergleichen? Erklärs mir doch mal bitte. Ich versteh' dich gerade nicht.
2012-12-30T07:19:20 rosti0E0 musst Du nicht casten. Ein if(0E0 == 'test'){} gibt Warnung, der numerische Kontext ist praktisch schon eingebaut ;)
Quotees ging um den string "0E0". was du schreibst, ist kein string
if('0E0' == 'test'){}
Argument "test" isn't numeric in numeric eq (==) at...
my $x = 3 + '0E0';
Quotedein operator + ist wieder numerisch.
2012-12-30T13:56:11 rostiGenau deswegen gibt es ja *String*-Operatoren und *Numerische*-Operatoren ;-)Mit String-Vergleichsoperatoren möchte mein Perl nun auch den String in 0E0 erkennen,
1
2
3
$foo = dualvar 10, "Hello";
$num = $foo + 2; # 12
$str = $foo . " world"; # Hello world
1
2
3
4
5
6
7
8
9
$ perl -MDevel::Peek -e 'my $var = 8.4; $var = "test"; $var = 3; Dump $var'
SV = PVNV(0x1293080) at 0x12b0a48
REFCNT = 1
FLAGS = (PADMY,IOK,pIOK)
IV = 3
NV = 8.4
PV = 0x12ab050 "test"\0
CUR = 4
LEN = 8
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
$ perl -MDevel::Peek -le 'my $var = 8.4; $var = "test"; $var = 3; Dump $var; print $var + 3'
SV = PVNV(0x1069080) at 0x1086a30
REFCNT = 1
FLAGS = (PADMY,IOK,pIOK)
IV = 3
NV = 8.4
PV = 0x2357070 "test"\0
6
$ perl -MDevel::Peek -le 'my $var = 8; $var = "test"; $var = 3.1; Dump $var; print $var + 3'
SV = PVNV(0x9f3080) at 0xa10a30
REFCNT = 1
FLAGS = (PADMY,NOK,pNOK)
IV = 0
NV = 3.1
PV = 0x2357070 "test"\0
6.1
$ perl -MDevel::Peek -le 'my $var = 8; $var = "test"; Dump $var; print $var + 3'
SV = PVIV(0x2352080) at 0x235ca20
REFCNT = 1
FLAGS = (PADMY,POK,pPOK)
IV = 8
PV = 0x2357070 "test"\0
CUR = 4
LEN = 8
3
QuoteGenau deswegen gibt es ja *String*-Operatoren und *Numerische*-Operatoren ;-)
2012-12-29T21:16:23 MuffiIch kenn jetzt nur einen String, der keine warning wirft und das ist "0 but true". Soweit ich weiss macht Perl dafür ne Ausnahme
1 2 3 4 5 6 7
use strict; use warnings; sub blah { 4711 } if ("0 but true" == 0) { blah(); }
2012-12-29T20:43:29 biancaDaraufhin zeigtest du ein Beispiel mit dem Du beweisen wolltest, dass das nicht so ist. Deinem Beispiel fehlt aber der ursprüngliche Vergleich eines nummerischen mit einem nicht nummerischen Wert, also dient dein Beispiel nicht als Beweis dafür, dass Perl bei einem ungültigen Vergleich trotz warnings nicht aussteigt, da dein Beispiel einen solchen ungültigen Vergleich garnicht enthält.
2012-12-30T13:29:41 GwenDragonIch wollte mit meinem Beispiel auch nicht irgendwelche Vergleiche beweisen. Schrieb sich das irgendwo!? Bin gerade irritiert.
//EDIT:
Wo bin ich hier, dass ich Aussagen beweisen muss?
Das nächste Mal unterlasse ich einfach Erklärungen und Leute können gern weniger wissen.
Vorsatz fürs Neue Jahr: Unterlasse es Menschen Perl-Tricks beizubringen.
2012-12-27T11:50:51 bianca2012-12-27T10:56:02 reneeDas Verhalten ist aber in vielen Fällen durchaus wünschenswert, sonst müsste man viele Typecasts machen. Und je nach Anwendungsfall ist das nur überflüssige Arbeit.
Ich hatte noch keinen Fall wo das erwünscht war. Entweder vergleiche ich Obst mit Obst und Gemüse mit Gemüse aber nicht Obst mit Gemüse.
Hast du ein Beispiel, wo das erwünscht ist?
perl -E ' say "yes" for 0 .. $ARGV[0]' 3
QuoteDas Verhalten ist aber in vielen Fällen durchaus wünschenswert, sonst müsste man viele Typecasts machen. Und je nach Anwendungsfall ist das nur überflüssige Arbeit.
2012-12-27T17:20:04 rostiStimmt so nicht.Am Wenigsten akzeptiere ich die Aussage, dass PHP vorzugsweise zum Entwickeln von Webanwendungen gemacht wurde. PHP ist ein Kartenhaus, was schon beim Angucken umfällt.
2012-12-27T18:31:22 rostiWas macht PHP so toll, dass jemand Perl hinschmeißt?
Vielleicht habt Ihr eine Antwort?
2012-12-27T19:15:47 bianca2012-12-27T18:31:22 rostiWas macht PHP so toll, dass jemand Perl hinschmeißt?
Vielleicht habt Ihr eine Antwort?
Das ist relativ einfach. Mach mal eine Auflistung von "tauglichen" Perl-Hostern mit aktuellem Perl (nicht unter 5.10.1) und mach mal dasselbe für PHP-Hoster. Mal schauen, welche Zahl da überwiegt.
2012-12-27T22:54:39 topegTja, aber heutzutage ist es ein Problem, ein Perl-Apache-Modul zu bekommen, das es ermöglicht, pro VirtualHost unabhängige Interpreter zwecks Privilegienseparation zuzulassen.Heutzutage ist es kein Problem Perl auf einen Server zu packen. Aber warum? Keiner benutzt es und PHP kann doch schon alles.
QuotePerl hat Intern kein Rechtemanagement. Man kann mehrere Interpreterinstanzen in einem Prozess nicht von einander Isolieren. Bei String-eval und co. ist das auch kein Problem. Die Instanzen sollen ja gerade kommunizieren können. Das ist ein enormes Problem, mit dem auch PHP und andere Interpreter kämpfen. So weit ich weiß können manche JavaVM so was.
2012-12-30T21:02:27 topegTja, wenn eine sowohl hostet als auch programmiert, dann ist seltener schon mal öfters vorhanden.Über solche Probleme stolpert man aber recht selten. Wie gesagt für Webhoster ist solche in Feature in der Sprache ein absoluter Pluspunkt.
1 2 3 4 5 6
sub control{ my $self = shift; if(! $self->launcher(qw(diffcalc add))){ die "Unbekannter Parameter!\n"; } }