-+  Associazione
-+  Documenti
 |-  Modern Perl
 |-  Bibliografia
 |-  Articoli
 |-  Talk
 |-  Perlfunc
 |-  F.A.Q.
 |-  F.A.Q. iclp
-+  Eventi
-+  Community
-+  Blog
-+  Link
Corso di Perl



 


Funzioni Perl in italiano

indietro

  • split /PATTERN/,ESPR,LIMITE
  • split /PATTERN/,ESPR
  • split /PATTERN/
  • split

    Divide la stringa ESPR in una lista di stringhe e restituisce tale lista. Di default, i campi vuoti iniziali sono mantenuti, mentre quelli in coda vengono cancellati (se tutti i campi sono vuoti, vengono considerati essere in coda).

    In un contesto scalare, restituisce il numero di campi trovati e mette i risultati della divisione nell'array @_. L'uso di split in un contesto scalare è tuttavia deprecato, poiché sovrascrive gli argomenti della vostra subroutine.

    Se ESPR viene omessa, divide la stringa $_. Se anche PATTERN viene omesso, divide la stringa in base agli spazi (dopo aver saltato ciascuno spazio presente in testa alla stringa). Qualunque cosa soddisfi PATTERN è trattato come un delimitatore che separa i campi. (Va notato che il delimitatore può essere più lungo di un carattere.)

    Se LIMITE viene specificato ed è positivo, esso rappresenta il massimo numero di campi in cui ESPR verrà divisa, però il numero effettivo di campi restituiti dipende da quante volte PATTERN è soddisfatto all'interno di ESPR. Se LIMITE non viene specificato o vale zero, allora i campi nulli in coda vengono omessi (cosa che i potenziali utilizzatori di pop farebbero bene a ricordare). Se LIMITE è negativo, allora viene trattato come se fosse stato specificato un valore di LIMIT arbitrariamente grande. Va notato che dividere una ESPR che vale stringa vuota, restituisce sempre una lista vuota, qualunque sia il LIMITE specificato.

    Un pattern che corrisponde alla stringa vuota (da non confondere con il pattern vuoto //, che è solo un elemento dell'insieme di pattern che corrispondono alla stringa vuota) dividerà il valore di ESPR in caratteri separati in corrispondenza a ciascun punto in cui il PATTERN viene soddisfatto. Ad esempio:

        print join(':', split(/ */, 'ohi la'));

    produce l'output 'o:h:i:l:a'.

    Come caso speciale di split, utilizzare il pattern vuoto // corrisponde specificamente al match della sola stringa vuota, e non deve essere confuso con l'uso di // per indicare "l'ultimo pattern soddisfatto con successo". Così, per split, il seguente:

        print join(':', split(//, 'ohi la'));

    produce l'output 'o:h:i: :l:a'.

    Quando ci sono dei match di ampiezza positiva all'inizio (o alla fine) della stringa, vengono prodotti dei campi vuoti in testa (o in coda); un match di ampiezza zero all'inizio (o alla fine) della stringa non produce un campo vuoto. Per esempio:

       print join(':', split(/(?=\w)/, 'ohi la!'));

    produce l'output 'o:h:i :l:a!'.

    Il parametro LIMITE può essere usato per dividere parzialmente una linea

        ($login, $passwd, $rimanente) = split(/:/, $_, 3);

    Quando si assegna ad una lista, se LIMITE viene omesso, oppure è zero, Perl fornisce un valore di LIMITE che è superiore di una unità al numero di variabili contenute nella lista, per evitare del lavoro non necessario. Per la lista sopra, LIMITE sarebbe stato pari a 4, di default. In applicazioni dove il tempo è un fattore critico, è necessario non dividere in più delle parti di cui si ha veramente bisogno.

    Se il PATTERN contiene delle parentesi, vengono creati elementi aggiuntivi nella lista, per ciascuna delle sottostringhe corrispondenti all'interno del delimitatore.

        split(/([,-])/, "1-10,20", 3);

    produce il valore di lista

        (1, '-', 10, ',', 20)

    Se aveste in $header l'header di un normale messaggio email Unix, potreste dividerlo in campi e rispettivi valori in questo modo:

        $header =~ s/\n\s+/ /g;  # mette a posto le continuazioni delle linee
        %hdrs   =  (UNIX_FROM => split /^(\S*?):\s*/m, $header);

    Il pattern /PATTERN può essere sostituito da una espressione per specificare pattern che variano a tempo di esecuzione. (Per effettuare una compilazione, a tempo di esecuzione, una volta sola, usate /$variabile/o).

    Come caso speciale, lo specificare un PATTERN costituito da uno spazio (' ') suddividerà in base agli spazi, esattamente come fa split quando viene chiamata senza argomenti. Dunque, split(' ') può essere utilizzata per emulare il comportamento predefinito di awk, mentre invece split(/ /) vi restituirà tanti campi iniziali nulli quanti sono gli spazi all'inizio della stringa. Una split su /\s+/ è equivalente ad una split(' '), tranne che lo spazio bianco ad inizio stringa genera un primo campo nullo. Una split senza argomenti in realtà, internamente, è una split(' ', $_).

    Un PATTERN di /^/ viene trattato come se fosse /^/m poiché, altrimenti, non sarebbe di grande utilità.

    Esempio:

        open(PASSWD, '/etc/passwd');
            while (<PASSWD>) {
                chomp;
                ($login, $passwd, $uid, $gid,
                $gcos, $home, $shell) = split(/:/);
                #...
        }

    Come avviene per la normale ricerca di pattern, ogni parentesi di cattura che non viene trovata in un'operazione di split() sarà impostata ad undef al momento della restituzione dei risultati:

        @campi = split /(A)|B/, "1A2B3";
        # @campi e` (1, 'A', 2, undef, 3);
D:
Progetti e documenti in rilievo
Corso di Perl Progetto pod2it
D:
La ML di Perl.it
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
Iscriviti!
D:
Annunci Google