Usa caratteri non di parole come nomi di variabili
L'uso di $%
invece di $a
consente di posizionare il nome della variabile proprio accanto a un if
, for
o while
costruire come in:
@r=(1,2,3,4,5);$%=4;
print$_*$%for@r
Molti possono essere usati, ma controlla i documenti e la risposta di @ BreadBox per quali hanno effetti magici!
Usa la mappa quando non puoi usare modificatori di istruzioni
Se non è possibile utilizzare i modificatori di istruzione secondo la risposta di @ JB , la mappa potrebbe salvare un byte:
for(@c){}
vs. map{}@c;
ed è utile se si desidera eseguire iterazioni nidificate in quanto è possibile inserire for
loop postfix all'interno di map
.
Usa tutte le variabili magiche delle espressioni regolari
Perl ha variabili magiche per "testo prima della corrispondenza" e "testo dopo la corrispondenza", quindi è possibile suddividere in gruppi di due con potenzialmente meno caratteri:
($x,$y)=split/,/,$_;
($x,$y)=/(.+),(.+)/;
/,/; # $x=$`, $y=$'
# Note: you will need to save the variables if you'll be using more regex matches!
Questo potrebbe anche funzionare bene in sostituzione di substr
:
$s=substr$_,1;
/./;# $s=$'
$s=substr$_,4;
/.{4}/;# $s=$'
Se hai bisogno del contenuto della partita, $&
puoi usarlo, ad esempio:
# assume input like '10 PRINT "Hello, World!"'
($n,$c,$x)=split/ /,$_;
/ .+ /; # $n=$`, $c=$&, $x=$'
Sostituisci i sottotitoli con nomi lunghi con un nome più breve
Se chiami dire print
quattro o più volte nel tuo codice (questo ovviamente varia con la durata della routine che stai chiamando), sostituiscilo con un nome secondario più corto:
sub p{print@_}p;p;p;p
vs.
print;print;print;print
Sostituire gli incrementatori / decrementatori condizionali
Se hai un codice come:
$i--if$i>0
Puoi usare:
$i-=$i>0
invece per salvare alcuni byte.
Converti in numero intero
Se non stai assegnando a una variabile e quindi non puoi utilizzare il suggerimento di breadbox , puoi usare l'espressione 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
Vale la pena notare, tuttavia, che non è necessario utilizzare un numero intero per accedere a un indice di array:
@letters = A..Z;
$letters[rand 26]; # random letter
$_=print""
è più corto di$_=print$foo
.