Tracce
/
Perl
Perl
/
Programma
/
Array e liste
Ar

Array e liste in Perl

1 esercizio

Informazioni su Array e liste

Gli array e le liste contengono una raccolta ordinata di scalari. A parte l'uso dei riferimenti (che tratteremo in un concetto separato), questo significa che gli array e le liste sono sempre a un solo livello, cioè non possono contenere altri array o liste.

Nella maggior parte dei casi, le liste sono racchiuse tra parentesi tonde (()) e i loro elementi sono separati da virgole (,).

Di solito una variabile di tipo array viene popolata assegnandole una lista, ad esempio my @names = ('Alice', 'Bob', 'Charlie');.

Si può accedere agli elementi di un array o di una lista specificando gli indici tramite un pedice, ad esempio ('Alice', 'Bob', 'Charlie')[1] # 'Bob'.

In Perl gli indici partono da 0. Gli indici negativi contano dalla fine dell'array o della lista, ad esempio ('Alice', 'Bob', 'Charlie')[-1] # 'Charlie'.

Funzioni

Ci sono molte funzioni pensate per operare su array e liste; tra le più utili ci sono grep, per ottenere una nuova lista di elementi filtrati che soddisfano una condizione, map, per trasformare gli elementi in una nuova lista di valori, e sort, per ottenere una nuova lista di elementi riordinati.

Tra le funzioni per modificare gli array ci sono push, per aggiungere elementi in fondo, pop, per rimuovere l'ultimo elemento, shift, per rimuovere il primo elemento, unshift, per aggiungere elementi all'inizio, e splice, per modifiche più complesse.

Incontrerai spesso anche l'iterazione su array e liste con un'istruzione for(each).

Varianza dei sigil

Quando accedi agli elementi di un array, il sigil che usi determina il risultato. Il pedice [] alla fine del nome della variabile è ciò che dice a Perl che stai accedendo a un array con quel nome.

my @names = ('Alice', 'Bob', 'Charlie');

$names[0]; # 'Alice'      <- A scalar
@names[0]; # ('Alice')    <- A slice (with only one index, this probably isn't what you want. There will be a warning.)
%names[0]; # (0, 'Alice') <- A key/index + value slice

$names[1, 2]; # 'Charlie'                <- A scalar (via unsupported syntax for an ancient feature. Probably not what you want. There will be a warning.)
@names[1, 2]; # ('Bob', 'Charlie')       <- A slice
%names[1, 2]; # (1, 'Bob', 2, 'Charlie') <- A key/index + value slice

Anche se è consentito, per motivi di leggibilità è consigliabile non far condividere lo stesso nome a variabili di tipo diverso.

Array e liste

Gli array e le liste hanno molte somiglianze e in molti contesti si possono usare in modo intercambiabile, ma non sono la stessa cosa. Una lista è una raccolta fissa e immutabile di scalari. Un array è una raccolta variabile di scalari, in cui si possono cambiare sia il contenuto sia la dimensione dell'array stesso.

In alcuni contesti si comportano in modo diverso. Un array usato in contesto scalare dà la dimensione dell'array. Una lista usata in contesto scalare dà l'ultimo elemento della lista, e probabilmente anche alcuni avvisi sul fatto che il resto del suo contenuto viene usato in contesto void.

my @names = ('Alice', 'Bob', 'Charlie');

scalar @names; # 3
scalar ('Alice', 'Bob', 'Charlie'); # 'Charlie' (and some warnings).

Puoi approfondire in questa FAQ: Qual è la differenza tra una lista e un array?

Modifica tramite GitHub Il collegamento si apre in una nuova finestra o scheda

Impara Array e liste

La pratica è bloccata

Sblocca 10 altri esercizi per esercitarti su Array e liste