In Perl le variabili si dividono in scalari ($), array (@) e hash (%):
Scalari ($variable) – memorizzano un singolo valore (stringa, numero):
my $name = "Ivan"; my $age = 30;
Array (@array) – insieme di elementi ordinati (indicizzati da numeri):
my @fruits = ("apple", "banana", "cherry"); print $fruits[1]; # banana
Hash (%hash) – insieme di coppie chiave-valore (array associativo):
my %colors = (red => "#ff0000", green => "#00ff00"); print $colors{"red"}; # #ff0000
Nota che per accedere a un elemento si usa un simbolo specifico a seconda del tipo di variabile:
$array[0] — elemento dell'array$hash{"key"} — valore dell'hash per chiaveQual è la differenza tra le espressioni @array[1,2] e $array[1,2]?
Risposta:
@array[1,2]— fornisce un elenco di più elementi dell'array (fetta).$array[1,2]— non è corretto, porta a un errore. Per accedere a più elementi dell'array si usa solo la fetta@array[...].Esempio:
my @array = (10, 20, 30, 40); my @slice = @array[1,2]; # (20, 30)
Storia
In un progetto di logging, un programmatore ha tentato di accedere a un elemento dell'hash tramite
@colors{"red"}. Di conseguenza, non otteneva il valore dell'hash, ma un errore casuale, poiché per un singolo valore è necessario$, non@.
Storia
In un servizio per iterare sugli indici di un array, hanno dimenticato di usare la corretta indicazione — invece di
$array[$i]hanno usato@array$i, il che portava a messaggi di avviso e risultati errati.
Storia
In un progetto API, hanno descritto una funzione che accetta un array come
$args, ma nella chiamata è stato passato un array senza scalare:func(@list). Si è scoperto che in questo modo gli elementi dell'array vengono "distribuiti" in una lista, e la funzione non funzionava come si aspettavano. Era corretto accettare l'array come@args.