Thread Was bedeutet ~~ (14 answers)
Opened by tseug at 2009-05-09 11:39

betterworld
 2009-05-09 14:58
#121388 #121388
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Guest Spieler
Die ~~ erzeugen hier einen scalaren Kontext.

Christoph

"~~" wird tatsächlich oft von Programmierern benutzt, die zu faul sind, scalar() zu schreiben ;)
Genau gesagt erzwingt es noch mehr als einen skalaren Kontext, nämlich einen String-Kontext oder einen Ganzzahl-Kontext. D.h. das Argument wird in einen String oder in eine Ganzahl umgewandelt, falls es noch keins von den beiden ist. Die bitweisen Operatoren in Perl arbeiten entweder auf Strings oder auf Ganzzahlen und verhalten sich hier oft subtil unterschiedlich, was gelegentlich für Verwirrung sorgt.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
% perl -lwe 'print ~~4'
4

# Fließkommazahlen gehen kaputt
% perl -lwe 'print ~~4.5'
4

% perl -lwe 'print ~~ "4.5"'
4.5

# Referenzen gehen kaputt
% perl -MData::Dumper -we 'print Dumper(~~{})'
$VAR1 = 'HASH(0x9827180)';

# Spaß mit Dualvars
% perl -lwe '$! = 1; print $!; print ~~$!'
Operation not permitted
1


Daher würde ich davon abraten, dass jetzt alle Leute nur noch ~~ statt scalar() benutzen, um leet zu sein.


Edit: Bei Perl-Golf bietet es sich auch manchmal an, stattdessen $x^0 oder $x|0 zu schreiben ("xor" oder "or" mit 0). So funktioniert es aber nur noch mit Ganzzahlen, und nicht mehr mit Strings.
Last edited: 2009-05-09 15:07:20 +0200 (CEST)

View full thread Was bedeutet ~~