In ogni momento si possono dichiarare le variabili locali, così una sub può lavorare su queste variabili senza interferire su altre usate da altre sub.
Il modo per farlo è questo:
local($variable, $anothervar, @even_an_array);
Questo crea queste nuove variabili nel momento dell'esecuzione, salvando i precedenti valori delle variabili con lo stesso nome (se esistono); in seguito, alla fine del blocco {} in cui erano incluse, queste variabili locali vengono distrutte, ed il loro valore iniziale viene ripristinato.
Le variabili locali possono essere inizializzate anche come
local($variable, $anothervar)=(value, anothervalue);
In particolare, è molto comune per le sub iniziare definendo le variabili locali per dare dei nomi agli argomenti che gli sono stati passati:
sub addhelp {
A questa sub sono passati 2 argomenti, il nome di un comando ed un testo di aiuto
local ($cmd, $txt) = @_;
$cmd =~ tr/A-Z/a-z/;
In questo caso A diventa a, B diventa b ecc., così il comando è reso tutto con lettere minuscole
foreach (split(/n+/, $txt) {
next unless $_;
skippa le linee vuote
push (@help, $_);
}
}
A questo punto le variabili $cmd e $txt scompaiono, così se la sub addhelp avesse avuto anch'essa una variabile chiamata $cmd, il suo valore originale sarebbe ripristinato