Operator x di Perl

Operator x berperilaku berbeda tergantung pada bagaimana ia digunakan.

Dalam konteks skalar hal ini digunakan untuk membuat garis panjang yang diinginkan karakter berulang. Kita dapat mengatakan bahwa pernyataan ini membuat "perkalian" dari string.

Dalam konteks daftar (dan jika operan kiri ditulis dalam tanda kurung atau dengan menggunakan qw) ia mengulangi unsur jumlah tertentu kali.

Berikut adalah contoh dari operator x dalam konteks skalar:

▶ Run
#!/usr/bin/perl

my $str = 'A' x 4;

print $str;

Program ini akan menampilkan string yang terdiri dari empat karakter 'A': 'AAAA'.

Jika operan kiri anda menentukan beberapa karakter, mereka semua akan diulang:

▶ Run
#!/usr/bin/perl

my $str = 'Abc' x 2;

print $str;

Contoh ini menampilkan sebuah string 'AbcAbc'.

Menggunakan string kosong

Dalam konteks skalar, operator x mengulangi string yang ditentukan dalam operan kiri jumlah waktu yang ditentukan dalam operan kanan.

Jika anda tentukan sebagai operan kiri string kosong '', dalam konteks skalar hasilnya akan selalu menjadi string kosong, terlepas dari nilai dari operan kanan:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my $str = '' x 100;

print Dumper $str;

Pada akhir program akan terlihat bahwa di $str berisi string kosong.

Tidak ada akal untuk menggunakan operator ini dalam konteks skalar, string kosong.

Nilai dari operan kanan

Dalam konteks skalar, hak operand dari operator x memberitahu berapa banyak waktu yang anda butuhkan untuk mengulang baris yang berisi operan kiri. Dalam kasus jika operan adalah bilangan bulat positif, maka jelas, apa yang terjadi sebagai hasilnya.

Tapi angka-angka tersebut tidak hanya positif.

  • Jika operan kanan adalah jumlah 0, hasilnya selalu string kosong.
  • Jika operan kanan adalah bilangan negatif, hasilnya selalu string kosong.

Dalam kasus kode use warnings;, menggunakan angka negatif sebagai hak operator akan menampilkan peringatan. Berikut ini adalah contoh script yang menampilkan sebuah string 'Negative repeat count does nothing at script.pl line 5.'.

▶ Run
#!/usr/bin/perl

use warnings;

my $str = 'a' x -3;

print $str;

Jika operan kanan adalah angka positif dengan bagian pecahan, ini bagian pecahan adalah hanya dibuang. Hasil 'A' x 2.1 akan persis sama seperti hasil 'A' x 2.99 — line 'AA'.

Daftar konteks

Dalam konteks daftar, operator x mengulangi elemen. Tapi selain itu, anda perlu daftar konteks, yang anda butuhkan juga untuk menampung operan kiri dalam tanda kurung. Kode berikut ini akan membuat sebuah array @arr yang berisi 3 elemen, masing-masing elemen adalah string 'a':

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my @arr = ('a') x 3;

print Dumper \@arr;

Tapi jika anda tidak menentukan tanda kurung di sebelah kiri operan, dan untuk menulis my @arr = 'a' x 3;, array @arrakan hanya satu item, string 'aaa'.

Selain sederhana kurung, anda dapat menggunakan operator qw:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my @arr = qw(abc def) x 2;

print Dumper \@arr;

Ketika anda menjalankan kode ini dalam array @arr akan memiliki 4 elemen, string 'abc', 'def', 'abc', 'def'.

Dokumentasi resmi

Berikut adalah cuplikan dari output perldoc perlop tentang operator x:

Multiplicative Operators

...

    Binary "x" is the repetition operator. In scalar context or if the left
    operand is not enclosed in parentheses, it returns a string consisting of
    the left operand repeated the number of times specified by the right
    operand. In list context, if the left operand is enclosed in parentheses
    or is a list formed by "qw/STRING/", it repeats the list. If the right
    operand is zero or negative (raising a warning on negative), it returns an
    empty string or an empty list, depending on the context.

        print '-' x 80;             # print row of dashes

        print "\t" x ($tab/8), ' ' x ($tab%8);      # tab over

        @ones = (1) x 80;           # a list of 80 1's
        @ones = (5) x @ones;        # set all elements to 5

Artikel lainnya