Verwenden Sie Nicht-Wort-Zeichen als Variablennamen
Mit $%
statt $a
ermöglicht es Ihnen , die Variablennamen zu setzen direkt neben ein if
, for
oder while
zu konstruieren , wie in:
@r=(1,2,3,4,5);$%=4;
print$_*$%for@r
Viele können verwendet werden, aber schauen Sie in den Dokumenten und in der Antwort von @ BreadBox nach, welche davon magische Effekte haben!
Verwenden Sie map, wenn Sie keine Anweisungsmodifikatoren verwenden können
Wenn Sie keine Anweisungsmodifikatoren gemäß der Antwort von @ JB verwenden können , speichert map möglicherweise ein Byte:
for(@c){}
gegen map{}@c;
und ist nützlich, wenn Sie verschachtelte Iterationen ausführen möchten, da Sie Postfix- for
Schleifen in das einfügen können map
.
Verwenden Sie alle magischen Variablen für reguläre Ausdrücke
Perl verfügt über magische Variablen für 'Text vor dem Abgleich' und 'Text nach dem Abgleich', sodass es möglich ist, in Zweiergruppen mit möglicherweise weniger Zeichen aufzuteilen:
($x,$y)=split/,/,$_;
($x,$y)=/(.+),(.+)/;
/,/; # $x=$`, $y=$'
# Note: you will need to save the variables if you'll be using more regex matches!
Dies kann auch als Ersatz für Folgendes verwendet werden substr
:
$s=substr$_,1;
/./;# $s=$'
$s=substr$_,4;
/.{4}/;# $s=$'
Wenn Sie den Inhalt des Spiels benötigen, $&
können verwendet werden, zB:
# assume input like '10 PRINT "Hello, World!"'
($n,$c,$x)=split/ /,$_;
/ .+ /; # $n=$`, $c=$&, $x=$'
Ersetzen Sie Subs mit langen Namen durch einen kürzeren Namen
Wenn Sie print
in Ihrem Code vier oder mehr Male sagen (dies hängt natürlich von der Länge der aufgerufenen Routine ab), ersetzen Sie ihn durch einen kürzeren Subnamen:
sub p{print@_}p;p;p;p
gegen
print;print;print;print
Ersetzen Sie bedingte Inkrementierer / Dekrementierer
Wenn Sie Code haben wie:
$i--if$i>0
Sie können verwenden:
$i-=$i>0
stattdessen, um einige Bytes zu speichern.
In Ganzzahl konvertieren
Wenn Sie keiner Variablen zuweisen und daher den Tipp der Brotbox nicht verwenden können, können Sie den folgenden Ausdruck verwenden 0|
:
rand 25 # random float eg. 19.3560355885212
int rand 25 # random int
0|rand 25 # random int
rand 25|0 # random int
~~rand 25 # random int
Beachten Sie jedoch, dass Sie keine Ganzzahl benötigen, um auf einen Array-Index zuzugreifen:
@letters = A..Z;
$letters[rand 26]; # random letter
$_=print""
ist kürzer als$_=print$foo
.