Predefinito variabile $_ in Perl

Tutte le variabili nel linguaggio di programmazione Perl che contengono in sé un valore iniziano con il simbolo del dollaro $. Ad esempio, è possibile creare una variabile $str o $var.

In Perl c'è la variabile speciale $_. Ci sono un sacco di posti in un linguaggio di programmazione Perl dove se non esplicitamente specificare una variabile, viene utilizzata la variabile $_. Ci sono parole chiave che leggono i valori di questa variabile, e ci sono quelli che stabiliscono i valori di questa variabile. Ma in questa variabile può essere mantenere il valore e la propria.

Le parole chiave che leggono il valore di $_

A titolo di esempio la parola chiave, che legge il valore di default di una variabile, è possibile portare print. Se si specifica print senza argomenti, sullo schermo viene stampato il contenuto di una variabile $_.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

$_ = 'Hello';

print;

Prima abbiamo salvato in una variabile $_ riga 'Hello' (si prega di notare che non abbiamo usato la parola chiave my).

E poi usiamo print, ma non passa lui non ha argomenti. In questo uso print visualizza il contenuto di una variabile $_. print; è la stessa cosa che e print $_;

In diretta — il programma visualizzerà il testo Hello.

Parole chiave print, say se utilizzato senza argomenti usano organizzare una variabile $_. È interessante che la parola chiave warn quando si utilizza senza argomenti variabile $_ non utilizza.

Un altro esempio è quando viene utilizzato variabile predefinita è di espressioni regolari. Per applicare l'espressione regolare a una variabile è necessario scrivere $str =~ /.../. E se basta scrivere /.../è la stessa cosa che e $_ =~ /.../.

Ecco un piccolo esempio di codice:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

$_ = 'Hello';

if (/ll/) {
    print 'yes';
} else {
    print 'no';
}

Circostanza if (/ll/) { controlleranno se nella variabile $_ due lettere l di fila. Dal momento che la barra'Hello' ci sono queste due lettere, allora viene eseguito il codice print 'yes';, che visualizza il testo yes su schermo.

Parole chiave, che inseriscono il valore in $_

Il più comunemente usato è la parola chiave, che cambia il valore della variabile $_ è foreach. Ecco un esempio di codice:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use feature qw(say);

foreach ('one', 'two', 'three') {
    say;
}

Qui il corpo del ciclo foreach viene eseguita 3 volte per ogni elemento della lista 'one', 'two', 'three'. Prima di ogni esecuzione del corpo del ciclo in una variabile $_ viene inserito l'elemento successivo della lista. In questo modo si possono registrare questo ciclo con l'esplicita indicazione che il valore è necessario inserire in una variabile $_: foreach $_ ('one', 'two', 'three') {

E poi usiamo say; che è la stessa cosa che e say $_;.

Un altro modo per inserire un valore in una variabile $_ è quello di utilizzare while (<>) {. Ecco il codice:

#!/usr/bin/perl

while (<>) {
    print " * $_";
}

Questo codice si legge il contenuto STDIN e restituisce ogni riga come markdown lista. Ecco un esempio di come lavorare con questo codice nella console:

$ perl -e 'print "1\n2\n3\n"' | perl script.pl
 * 1
 * 2
 * 3

Prima abbiamo usato perl однострочник, che mostra tre righe, ogni riga cifra. E poi abbiamo trasferito questa conclusione su input script che abbiamo appena scritto. Il corpo del ciclo while (<>) { viene eseguita per ogni riga di input e questa riga viene inserito nella variabile $_.

Esempio

Ecco un altro esempio di codice in cui viene utilizzato attivamente predefinita variabile $_:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my @arr = map { ucfirst } grep { /^.{3}\z/ } ('one', 'two', 'three');

print Dumper \@arr;

Se si esegue questo programma, sullo schermo viene visualizzato:

$VAR1 = [
          'One',
          'Two'
        ];

Allora, che cosa sta succedendo qui. L'espressione in cui avviene l'assegnazione dei valori di un array @arr c'è bisogno di leggere da destra a sinistra.

  • In primo luogo abbiamo identificato una lista di tre righe ('one', 'two', 'three')
  • Sopra abbiamo usato la parola chiave grep a questo elenco. grep individua ogni elemento da una lista iniziale di una variabile $_ e verifica che è scritto tra parentesi graffe. Se questo controllo restituisce la verità grep restituisce il valore della lista. In questo esempio, tra parentesi graffe contiene un'espressione regolare, che si applica a default variabile. È un'espressione regolare soddisfano solo le righe che consistono esattamente da tre caratteri. Il risultato del lavoro grep — questa è una lista già da due righe ('one', 'two').
  • Lista di due elementi cadrà in map. Questa è la parola chiave individua ogni elemento della lista in organizzare una variabile ed esegue il codice che è scritto tra parentesi graffe. Un risultato che restituisce il codice è un elemento di un elenco, che restituisce map. In questo esempio usiamo la funzione lcfirst, che restituisce una stringa il cui primo carattere è tradotto in maiuscolo. Se questa funzione non specificare un argomento, quello funziona di default della variabile.

La documentazione ufficiale di

Ecco un frammento di output del comando perldoc perlvar pro variabile $_:

    $_      The default input and pattern-searching space. The following
            pairs are equivalent:

                while (<>) {...}    # equivalent only in while!
                while (defined($_ = <>)) {...}

                /^Subject:/
                $_ =~ /^Subject:/

                tr/a-z/A-Z/
                $_ =~ tr/a-z/A-Z/

                chomp
                chomp($_)

            Here are the places where Perl will assume $_ even if you don't
            use it:

            *  The following functions use $_ as a default argument:

               abs, alarm, chomp, chop, chr, chroot, cos, defined, eval,
               evalbytes, exp, fc, glob, hex, int, lc, lcfirst, length, log,
               lstat, mkdir, oct, ord, pos, print, printf, quotemeta,
               readlink, readpipe, ref, require, reverse (in scalar context
               only), rmdir, say, sin, split (for its second argument),
               sqrt, stat, study, uc, ucfirst, unlink, unpack.

            *  All file tests ("-f", "-d") except for "-t", which defaults
               to STDIN. See "-X" in perlfunc

            *  The pattern matching operations "m//", "s///" and "tr///"
               (aka "y///") when used without an "=~" operator.

            *  The default iterator variable in a "foreach" loop if no other
               variable is supplied.

            *  The implicit iterator variable in the "grep()" and "map()"
               functions.

            *  The implicit variable of "given()".

            *  The default place to put the next value or input record when
               a "", "readline", "readdir" or "each" operation's result
               is tested by itself as the sole criterion of a "while" test.
               Outside a "while" test, this will not happen.

            $_ is a global variable.

            However, between perl v5.10.0 and v5.24.0, it could be used
            lexically by writing "my $_". Making $_ refer to the global $_
            in the same scope was then possible with "our $_". This
            experimental feature was removed and is now a fatal error, but
            you may encounter it in older code.

            Mnemonic: underline is understood in certain operations.

Temi correlati

Altri articoli