Use caracteres que no sean palabras como nombres de variables
Utilizando $%en lugar de $ase permitirá colocar el nombre de la variable justo al lado de una if, foro whileconstruir como en:
@r=(1,2,3,4,5);$%=4;
print$_*$%for@r
Se pueden usar muchos, pero revisa los documentos y la respuesta de @ BreadBox para saber cuáles tienen efectos mágicos.
Use el mapa cuando no pueda usar modificadores de instrucciones
Si no puede usar modfiers de declaración según la respuesta de @ JB , el mapa puede guardar un byte:
for(@c){} vs. map{}@c;
y es útil si desea hacer iteraciones anidadas, ya que puede colocar forbucles postfix dentro de map.
Usa todas las variables mágicas de Expresión Regular
Perl tiene variables mágicas para 'texto antes del partido' y 'texto después del partido', por lo que es posible dividirlo en grupos de dos con potencialmente menos caracteres:
($x,$y)=split/,/,$_;
($x,$y)=/(.+),(.+)/;
/,/; # $x=$`, $y=$'
# Note: you will need to save the variables if you'll be using more regex matches!
Esto también podría funcionar bien como un reemplazo para substr:
$s=substr$_,1;
/./;# $s=$'
$s=substr$_,4;
/.{4}/;# $s=$'
Si necesita el contenido del partido, $&se puede utilizar, por ejemplo:
# assume input like '10 PRINT "Hello, World!"'
($n,$c,$x)=split/ /,$_;
/ .+ /; # $n=$`, $c=$&, $x=$'
Reemplazar subs por nombres largos con un nombre más corto
Si llama por ejemplo printcuatro o más veces en su código (esto obviamente varía con la duración de la rutina que está llamando), reemplácelo con un subnombre más corto:
sub p{print@_}p;p;p;p
vs.
print;print;print;print
Reemplazar incrementos / decrementadores condicionales
Si tienes un código como:
$i--if$i>0
puedes usar:
$i-=$i>0
en cambio para guardar algunos bytes.
Convertir a entero
Si no está asignando a una variable y no puede usar la sugerencia de breadbox , puede usar la expresión 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
Sin embargo, vale la pena señalar que no necesita usar un número entero para acceder a un índice de matriz:
@letters = A..Z;
$letters[rand 26]; # random letter
$_=print""es más corto que$_=print$foo.