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



 


indietro

[28] Come posso utilizzare i backtick senza che avvenga alcuna interpretazione da parte della shell?

La cosa è un po' ingannevole. Non potete semplicemente scrivere il comando così:

    @ok = `grep @opzioni '$stringa_di_ricerca' @nomifile`;

Dal Perl 5.8.0, potete usare open() con più argomenti. Come nel caso delle chiamate in formato lista a system() e ad exec(), non avviene alcun escape da parte della shell.

    open( GREP, "-|", 'grep', @opzioni, $stringa_di_ricerca, @nomifile );
    chomp(@ok = );
    close GREP;

Potete anche fare così:

    my @ok = ();
    if (open(GREP, "-|")) {
        while () {
            chomp;
            push(@ok, $_);
        }
        close GREP;
    } else {
        exec 'grep', @opzioni, $stringa_di_ricerca, @nomifile;
    }

Come con system(), non si ha un escape da parte della shell nemmeno utilizzando exec() su una lista. Ulteriori esempi si possono trovare in perlipc/"Safe Pipe Opens" ["Aperture Sicure di Pipe", NdT].

Notate che, se utilizzate Microsoft, non è possibile alcuna soluzione a questo fastidioso problema. Anche se Perl ha la possibilità di emulare fork(), non combinate comunque, poiché Microsoft non ha una API del tipo argc/argv.

vedi in inglese

AUTORE E COPYRIGHT

Copyright (c) 1997, 1998, 1999, 2000, 2001 Tom Christiansen e Nathan Torkington. Tutti i diritti riservati.

Questa documentazione è libera; puoi ridistribuirla e/o modificarla secondo gli stessi termini applicati al Perl.

Indipendentemente dalle modalitè di distribuzione, tutti gli esempi di codice in questo file sono rilasciati al pubblico dominio. Potete, e siete incoraggiati a farlo, utilizzare il presente codice o qualunque forma derivata da esso nei vostri programmi per divertimento o per profitto. Un semplice commento nel codice che dia riconoscimento alle FAQ sarebbe cortese ma non è obbligatorio.

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