Operator unary minus - di Perl

Jumlah

Jika unary minus diterapkan untuk angka atau string yang berisi nomor, maka operasi hasilnya adalah nomor dengan tanda berlawanan (kecuali untuk situasi dengan nol, tentang hal ini di bagian berikutnya).

Berikut ini adalah contoh. Kode ini akan menampilkan -3 (tidak ada kesalahan dan tidak ada peringatan tidak akan):

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

print -'3';

Dan itu -3, yang telah kita terima — ini adalah nomor -3, bukan garis '-3'.

Nol

Jika anda menerapkan unary minus dengan jumlah 0 atau baris '0', hasilnya akan menjadi jumlah 0.

Bareword

Jika anda menerapkan unary minus untuk pengenal, hasilnya akan menjadi sebuah string yang terdiri dari minus dan ini ID. Dalam contoh ini, variabel $var adalah garis '-asdf'. Tidak ada kesalahan dan peringatan no.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var = - asdf;

print $var;

Identifier harus diawali dengan garis bawah atau dengan huruf. Berikut adalah kode yang menggunakan digit sebagai karakter pertama:

▶ Run
#!/usr/bin/perl

my $var = - 3asdf;

print $var;

Kode ini akan menghasilkan kesalahan:

Bareword found where operator expected at script.pl line 3, near "3asdf"
    (Missing operator before asdf?)
syntax error at script.pl line 3, near "3asdf"
Execution of script.pl aborted due to compilation errors.

String dengan nomor, yang dimulai dengan karakter + atau -

Berikut adalah contoh kode:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

print -'+44', "\n";
print -'-44', "\n";

Hasil dari kode ini tergantung pada versi Perl. 5.8, 5.10, 5.12 menampilkan baris pertama -44, dan yang kedua +44. Sejak 5.14 baris kedua akan 44 tanpa ditambah.

Dan berikut adalah contoh kode, umumnya memiliki 3 cara yang berbeda, tergantung pada versi Perl:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

print -'+0', "\n";
print -'-0', "\n";

5.8, 5.10, 5.12 menampilkan -0, +0, Versi 5.14 dan 5.16 menampilkan dua angka nol. Dan sejak 5.18 pada layar akan -0 dan 0.

Baris yang dimulai dengan karakter + atau -

Dalam kasus jika anda menerapkan unary minus untuk baris yang dimulai dengan plus atau minus, hasilnya adalah string yang dimulai dengan karakter lain. Berikut ini sebuah contoh:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

print -"+asdf\n";
print -"-asdf\n";

Program ini akan menampilkan:

-asdf
+asdf

String yang tidak dimulai dengan + atau -

Dalam situasi ini, Perl akan mencoba untuk mengkonversi string ke number.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

print -'3.8asdf';

Hasil dari kode di atas adalah peringatan dan jumlah -3.8:

Argument "3.8asdf" isn't numeric in negation (-) at script.pl line 6.
-3.8

Dokumentasi resmi

Berikut adalah cuplikan dari output perldoc perlop tentang unary minus:

    Unary "-" performs arithmetic negation if the operand is numeric,
    including any string that looks like a number. If the operand is an
    identifier, a string consisting of a minus sign concatenated with the
    identifier is returned. Otherwise, if the string starts with a plus or
    minus, a string starting with the opposite sign is returned. One effect of
    these rules is that "-bareword" is equivalent to the string "-bareword".
    If, however, the string begins with a non-alphabetic character (excluding
    "+" or "-"), Perl will attempt to convert the string to a numeric, and the
    arithmetic negation is performed. If the string cannot be cleanly
    converted to a numeric, Perl will give the warning Argument "the string"
    isn't numeric in negation (-) at ....

Artikel lainnya