Default variabel $_ di Perl

Semua variabel di Perl bahasa pemrograman yang berisi nilai tunggal mulai dengan dolar $. Misalnya, anda dapat membuat variabel $str atau $var.

Di Perl ada variabel khusus $_. Ada banyak tempat di dalam bahasa pemrograman Perl di mana jika anda tidak secara eksplisit menentukan variabel, variabel yang akan digunakan $_. Ada kata-kata kunci yang membaca nilai dari variabel ini, dan ada orang-orang yang mengatur nilai-nilai dalam variabel ini. Tapi dalam hal ini variabel menyimpan nilai mereka sendiri.

Kata kunci yang membaca nilai dari $_

Sebagai contoh, kata kunci yang membaca nilai dari variabel default memimpin print. Jika anda menentukan print tanpa argumen, layar akan mencetak isi variabel $_.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

$_ = 'Hello';

print;

Pertama, kita disimpan dalam variabel $_ line 'Hello'(catatan kami tidak menggunakan kata kunci my).

Dan kemudian kita menggunakan print, tetapi tidak mengirim apapun argumen. Dalam hal ini menggunakan print menampilkan isi dari sebuah variabel $_. print; adalah sama seperti print $_;

Hasil — program ini akan menampilkan teks Hello.

Kata kunci print, say ketika digunakan tanpa argumen yang digunakan default variabel $_. Yang menarik adalah bahwa kata kunci warn ketika menggunakan dengan tidak ada argumen variabel $_ tidak digunakan.

Contoh lain ketika menggunakan default variabel adalah ekspresi reguler. Dalam rangka untuk menerapkan ekspresi reguler untuk variabel yang anda butuhkan untuk menulis $str =~ /.../. Dan jika anda hanya menulis /.../, itu adalah sama seperti $_ =~ /.../.

Berikut adalah kecil contoh kode:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

$_ = 'Hello';

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

Kondisi if (/ll/) { memeriksa apakah variabel $_ dua huruf l berturut-turut. Karena di baris'Hello' ada dua surat, maka kode berjalan print 'yes';, yang menampilkan teks yes pada layar.

Kata kunci yang menempatkan nilai dalam $_

Yang paling sering digunakan kata kunci yang mengubah nilai dari variabel $_ adalah foreach. Berikut adalah contoh kode:

▶ Run
#!/usr/bin/perl

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

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

Di sini tubuh loop foreach dilakukan sebanyak 3 kali untuk masing-masing item dari daftar 'one', 'two', 'three'. Sebelum setiap pelaksanaan loop tubuh dalam variabel $_ ditempatkan elemen berikutnya dari daftar. Sehingga anda dapat merekam siklus ini dengan indikasi yang jelas tentang nilai apa yang harus ditempatkan dalam variabel $_: foreach $_ ('one', 'two', 'three') {

Dan kemudian kita menggunakan say; yang sama seperti say $_;.

Cara lain untuk menempatkan nilai ke variabel $_ adalah dengan menggunakan while (<>) {. Berikut ini adalah kode:

#!/usr/bin/perl

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

Kode ini membaca STDIN dan output setiap baris sebagai penurunan harga daftar. Berikut adalah contoh bagaimana bekerja dengan kode ini di console:

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

Pertama, kami menggunakan perl odnotrahniki, yang menampilkan tiga baris, setiap baris angka. Dan kemudian kita memiliki dialihkan ini output ke input dari script yang kita tulis. Tubuh loop while (<>) { dilakukan untuk setiap baris input, dan string ini ditempatkan pada variabel $_.

Contoh

Berikut ini contoh lain dari kode yang aktif digunakan default variabel $_:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

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

print Dumper \@arr;

Jika anda menjalankan program ini, maka akan muncul pada layar:

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

Jadi, apa yang terjadi di sini. Ekspresi yang ada penugasan dari nilai-nilai ke array @arr anda perlu membaca dari kanan ke kiri.

  • Pertama, kita mengidentifikasi daftar dari tiga senar ('one', 'two', 'three')
  • Kemudian, kita menggunakan kata kunci grep ke daftar ini. grep tempat masing-masing elemen dari daftar asli untuk variabel $_ dan pemeriksaan, yang ditulis dalam tanda kurung kurawal. Jika tes ini mengembalikan nilai true, maka grep mengembalikan nilai dari daftar. Dalam contoh ini, kurung kurawal mengandung ekspresi reguler yang diterapkan ke variabel default. Ini ekspresi reguler akan memuaskan hanya string yang terdiri dari tiga karakter. Hasil grep adalah daftar dari dua string ('one', 'two').
  • Daftar dari dua elemen jatuh ke map. Kata kunci ini menempatkan setiap item daftar di default variabel, dan mengeksekusi kode yang ditulis dalam tanda kurung kurawal. Hasil yang mengembalikan kode adalah daftar item yang mengembalikan map. Dalam contoh ini kita menggunakan fungsi lcfirst, yang mengembalikan sebuah string dan karakter pertama adalah huruf besar. Jika fungsi ini tidak menentukan argumen, maka bekerja dengan default variabel.

Dokumentasi resmi

Berikut adalah cuplikan dari output perldoc perlvar Pro variabel $_:

    $_      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 "<FH>", "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.

Topik terkait

Artikel lainnya