Utilisez des caractères autres que des mots comme noms de variables
Utiliser $%
au lieu de $a
peut vous permettre de placer le nom de variable juste à côté d'un if
, for
ou de while
construire comme dans:
@r=(1,2,3,4,5);$%=4;
print$_*$%for@r
Beaucoup peuvent être utilisés, mais vérifiez la documentation et la réponse de @ BreadBox pour savoir lesquelles ont des effets magiques!
Utiliser la carte lorsque vous ne pouvez pas utiliser les modificateurs d'instruction
Si vous ne pouvez pas utiliser l'instruction modfier selon la réponse de @ JB , map peut enregistrer un octet:
for(@c){}
contre. map{}@c;
et est utile si vous voulez faire des itérations imbriquées car vous pouvez mettre des for
boucles postfix dans le map
.
Utilisez toutes les variables magiques des expressions régulières
Perl a des variables magiques pour 'texte avant correspondance' et 'texte après correspondance', il est donc possible de scinder en groupes de deux avec potentiellement moins de caractères:
($x,$y)=split/,/,$_;
($x,$y)=/(.+),(.+)/;
/,/; # $x=$`, $y=$'
# Note: you will need to save the variables if you'll be using more regex matches!
Cela pourrait également bien fonctionner en remplacement de substr
:
$s=substr$_,1;
/./;# $s=$'
$s=substr$_,4;
/.{4}/;# $s=$'
Si vous avez besoin du contenu de la correspondance, vous $&
pouvez l'utiliser, par exemple:
# assume input like '10 PRINT "Hello, World!"'
($n,$c,$x)=split/ /,$_;
/ .+ /; # $n=$`, $c=$&, $x=$'
Remplacer les sous-noms par des noms longs par des noms plus courts
Si vous appelez print
plusieurs fois dans votre code (cela dépend évidemment de la durée de la routine que vous appelez), remplacez-le par un nom de sous-nom plus court:
sub p{print@_}p;p;p;p
contre.
print;print;print;print
Remplacer les incrémenteurs / décrémenteurs conditionnels
Si vous avez un code comme:
$i--if$i>0
vous pouvez utiliser:
$i-=$i>0
au lieu de sauver quelques octets.
Convertir en entier
Si vous n'affectez pas de variable et ne pouvez donc pas utiliser le conseil de breadbox , vous pouvez utiliser l'expression 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
Il est à noter cependant que vous n'avez pas besoin d'utiliser un entier pour accéder à un index de tableau:
@letters = A..Z;
$letters[rand 26]; # random letter
$_=print""
est plus court que$_=print$foo
.