indietro

  • substr ESPR,SCOSTAMENTO,LUNGHEZZA,SOSTITUZIONE
  • substr ESPR,SCOSTAMENTO,LUNGHEZZA
  • substr ESPR,SCOSTAMENTO

    Estrae una sottostringa da ESPR e la restituisce. Il primo carattere è a scostamento 0, oppure la qualsivoglia impostazione data a $[ (ma non è consigliabile farlo). Se SCOSTAMENTO è un numero negativo (o più precisamente, minore di $[), viene contato dalla fine della stringa. Se LUNGHEZZA viene omesso, restituisce tutto ciò che rimane fino alla fine della stringa. Se LUNGHEZZA è un numero negativo, rimuove il numero specificato di caratteri dalla fine della stringa.

    Potete usare la funzione substr() come valore assegnabile, nel qual caso ESPR deve essere a sua volta un valore assegnabile. Se assegnate qualcosa di più corto di LUNGHEZZA, la stringa viene ridotta, mentre se assegnate qualcosa di più lungo di LUNGHEZZA, la stringa viene allungata per fargli posto. Per mantenere la stringa della stessa lunghezza, potrebbe essere necessario riempire lo spazio che avanza o eliminare i valori in eccesso utilizzando sprintf.

    Se SCOSTAMENTO e LUNGHEZZA specificano una sottostringa che è parzialmente al di fuori della stringa, solo la parte dentro la stringa viene restituita. Se la sottostringa è oltre entrambi gli estremi della stringa, substr() restituisce il valore indefinito e produce un avvertimento. Quando viene utilizzata come valore assegnabile, specificare una sottostringa interamente al di fuori della stringa è un errore bloccante. Di seguito un esempio che mostra il comportamento per i casi limite:

        my $nome = 'fred';
        substr($nome, 4) = 'dy';		# $nome contiene ora 'freddy'
        my $nulla = substr $nome, 6, 2;	# restituisce '' (senza warning)
        my $oops = substr $nome, 7;		# restituisce undef, con warning
        substr($nome, 7) = 'gap';		# errore bloccante

    Un'alternativa all'utilizzo di substr() come valore assegnabile è quella di specificare un valore da sostituire come quarto argomento. Questo permette di sostituire una parte di ESPR e restituisce ciò che c'era in quella parte prima dell'operazione, proprio come fa splice().