ProgrammazioneSviluppatore Perl

Descrivi le caratteristiche delle variabili in Perl. Qual è la differenza tra variabili scalari, array e hash? Fai degli esempi di utilizzo di ciascun tipo.

Supera i colloqui con l'assistente IA Hintsage

Risposta

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 chiave

Domanda ingannevole

Qual è 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)

Esempi di errori reali dovuti all'ignoranza delle sottigliezze dell'argomento


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.