In questa parte del Tutorial Perl impareremo alcune delle funzioni fornite da Perl per la manipolazione di stringhe.
lc, uc, length
Ci sono molte funzioni semplici come lc e uc che restituiscono, rispettivamente, le versioni minuscola e maiuscola della stringa originale. Esiste poi una funzione length che restituisce il numero di caratteri della stringa data.
Guardate il seguente esempio:
use strict;
use warnings;
use 5.010;
my $str = 'CiAo';
say lc $str; # ciao
say uc $str; # CIAO
say length $str; # 4
index
Un'altra funzione è index. Questa funzione riceve due stringhe e restituisce la posizione della seconda stringa nella prima.
use strict;
use warnings;
use 5.010;
my $str = "Un gatto nero salto' giu' da un albero verde";
say index $str, 'gatto'; # 3
say index $str, 'cane'; # -1
say index $str, "Un"; # 0
say index $str, "un"; # 29
La prima chiamata a index
restituisce 3 perché la stringa "gatto" inizia al carattere in posizione 3.
La seconda chiamata a index
restituisce -1 per indicare che la stringa "cane" non c'è.
La terza chiamata mostra che index
restituisce 0
quando la seconda stringa è un prefisso della prima.
Il quarto esempio mostra che index
cerca delle corrispondenze esatte e distingue tra maiuscole e minuscole.
Quindi "un" e "Un" sono diverse.
index()
ricerca stringhe che non devono necessariamente essere parole, quindi anche la stringa "n " può essere cercata:
say index $str, "n "; # 1
index()
può anche ricevere un terzo parametro che indica la posizione da cui
iniziare la ricerca. Quindi, dato che abbiamo trovato l'inizio di "n " al secondo carattere della prima stringa,
possiamo provare una ricerca iniziando dalla terza posizione per vedere se c'è un'altra occorrenza di "n ":
say index $str, "n "; # 1
say index $str, "n ", 2; # 30
say index $str, "n", 2; # 9
Cercare "n" senza lo spazio da un risultato diverso.
Infine, c'è un'altra funzione rindex che inizia la ricerca nella stringa da destra:
say rindex $str, "n"; # 30
say rindex $str, "n", 29; # 9
say rindex $str, "n", 8; # 1
substr
Penso che la funzione più interessante trattata in questo articolo sia substr
.
Essenzialmente è l'opposto di index(). Mentre index() vi dice
dove si trova una data stringa, substr vi da una sottostringa che si trova a una data posizione.
Di solito substr
riceve 3 parametri. Il primo è la stringa. Il secondo è una posizione
a partire da 0, anche detta offset e il terzo è la lunghezza della
sottostringa che vogliamo ottenere.
use strict;
use warnings;
use 5.010;
my $str = "Il gatto nero si arrampica sull'albero verde"
say substr $str, 3, 5; # gatto
substr conta a partire da 0 quindi il carattere in posizione 3 è la lettera g.
say substr $str, 3, -18; # gatto nero si arrampica
Il terzo parametro (la lunghezza) può anche essere un numero negativo. In quel caso va interpretato come il numero di caratteri da destra nella stringa originale che NON devono essere inclusi. Quindi l'istruzione sopra significa: conta 3 da sinistra, 18 da destra e restituisci quello che sta in mezzo.
say substr $str, 14; # si arrampica sull'albero verde
Potete anche omettere il terzo parametro (lunghezza), e ciò verrà interpretato come: restituisci tutti i caratteri dalla posizione 14 alla fine della stringa.
say substr $str, -5; # verde
say substr $str, -5, 2; # ve
Possiamo anche usare un numero negativo come offset, che viene interpretato come:
conta 5 da destra e inizia da lì. È come specificare l'offset
length($str)-5
.
Rimpiazzare parti di una stringa
L'ultimo esempio è un po' funky.
In tutti i casi esaminati fino ad ora substr
ha restituito la sottostringa
e lasciato intatta la stringa originale. In questo esempio, il valore restituito da
substr si comporterà come sempre, ma substr cambierà anche
il contenuto della stringa originale!
Il valore restituito da substr()
è sempre determinato dai primi 3 parametri,
ma in questo caso substr ha un quarto parametro. Si tratta di una stringa che deve
sostituire la sottostringa selezionata nella stringa originale.
my $z = substr $str, 14, 12, "salta";
say $z; # si arrampica
say $str; # Il gatto nero salta sull'albero verde
Quindi substr $str, 14, 12, "salta"
restituisce le parole si arrampica,
ma a causa del quarto parametro, la stringa originale è stata modificata.