Apa yang benar dan salah di Perl

Dalam bahasa pemrograman Perl tidak ada nilai-nilai khusus yang berarti benar dan salah.

Setiap nilai yang Perl dapat menafsirkan sebagai nilai Boolean. Sebagai contoh, string 'Hello' adalah benar. Kode berikut akan menampilkan string 'true':

▶ Run
#!/usr/bin/perl

if ('Hello') {
    print 'true';
} else {
    print 'false';
}

Nilai-nilai apa yang palsu

Dalam bahasa pemrograman Perl ada 5 nilai-nilai yang palsu. Ini:

  • undef
  • 0 — 0
  • 0.0 — jumlah 0.0
  • '' — string kosong
  • '0' — turut 0

Berikut ini adalah contoh yang menunjukkan bahwa semua nilai-nilai ini ditafsirkan oleh Perl sebagai kebohongan. Kode ini akan menampilkan 5 kali kata 'false':

▶ Run
#!/usr/bin/perl

foreach my $val (undef, 0, 0.0, '', '0') {
    if ($val) {
        print "true\n";
    } else {
        print "false\n";
    }
}

Nilai-nilai apa yang benar

Kebenaran adalah semua nilai-nilai, kecuali yang 5 yang palsu.

Aturan

Dalam rangka untuk mengingat apa yang salah, anda dapat menggunakan aturan: "Semua bahwa 0 adalah false lain dari '0 tapi benar' row".

Semua ini 5 nilai false jika mereka digunakan sebagai angka menjadi 0. Berikut adalah kode yang menegaskan hal itu, kode menampilkan 5 nol:

▶ Run
#!/usr/bin/perl

foreach my $val (undef, 0, 0.0, '', '0') {
    print $val + 0, "\n";
}

Namun, jika anda menggunakan use strict; dan use warnings; (yang hampir selalu layak dilakukan), dalam kasus undef dan string kosong Perl akan menampilkan peringatan.

Berikut adalah kode dan hasil karyanya dalam kasus undef:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var = undef;

print $var + 0;
Use of uninitialized value $var in addition (+) at script.pl line 8.
0

Dan berikut adalah kode dan hasilnya dalam kasus string kosong:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var = '';

print $var + 0;
Argument "" isn't numeric in addition (+) at script.pl line 8.
0

0 but true

Di Perl ada nilai-nilai tersebut dalam sebuah Boolean konteks yang benar, tetapi ketika digunakan dalam karena jumlah dikonversi ke angka nol. Semua nilai-nilai tersebut adalah string.

Sebagai contoh, string '0ASDF' adalah contoh dari nilai tersebut. Ketika digunakan sebagai nilai Boolean string ini akan ditafsirkan sebagai benar. Benar-benar, hanya ada 2 garis, yang berbohong — string kosong dan string yang hanya berisi satu karakter angka nol, baris '0ASDF' tidak tak satu pun dari dua baris, sehingga tidak berbohong, dan kebenaran.

Berikut adalah kode yang menunjukkan apa garis '0ASDF' adalah benar (kode yang akan menampilkan string 'true'):

▶ Run
#!/usr/bin/perl

if ('0ASDF') {
    print 'true';
} else {
    print 'false';
}

Jika garis ini '0ASDF' untuk digunakan sebagai nomor, itu ditafsirkan sebagai angka 0 (namun, ketika dimasukkan use strict;, use warnings; akan menjadi peringatan):

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var = '0ASDF';

print $var + 0;
Argument "0ASDF" isn't numeric in addition (+) at script.pl line 8.
0

Yang paling terkenal menggunakan 0 but true nilai-nilai yang terjadi di Perl DBI perpustakaan, menggunakan string '0E0'.

Array, Hash, Referensi

Array adalah benar jika ada setidaknya satu nilai. Jika dalam array tidak ada nilai, maka array adalah palsu.

Demikian pula, jika hash memiliki setidaknya satu pasangan nilai, maka hash adalah benar. Jika hash tidak tidak ada pasangan nilai, itu adalah sebuah kebohongan.

Referensi selalu benar, tidak peduli apa itu mengacu pada. Bahkan referensi ke array kosong [] atau kosong hash {} adalah kebenaran.

Satu dan string kosong

Sering digunakan untuk menulis kode yang benar adalah nomor satu, dan untuk menulis kebohongan yang digunakan angka nol.

Menariknya, ia percaya bahwa canonical Perl nilai untuk menunjukkan kebohongan tidak jumlah 0, dan string kosong ''.

Berikut adalah contoh yang menunjukkan hal ini. Kami mengambil garis 'Hello', yang adalah kebenaran, dan dengan operator unari ! berubah menjadi kebohongan:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

print Dumper !'Hello';

Hasil yang muncul pada layar teks $VAR1 = '';

Jika anda menggunakan operator ! dua kali, kita memperoleh kanonik nilai kebenaran dari sudut pandang Perl:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

print Dumper !!'Hello';

(pada layar muncul teks $VAR1 = 1;).

Masalah keterbacaan

Sering digunakan untuk menulis kode yang benar adalah nomor satu, dan untuk menulis kebohongan yang digunakan angka nol. Tapi, sayangnya, dari angka-angka ini tidak jelas apa artinya ini — jumlah (dan mungkin ada nomor lain), atau bendera yang berarti benar.

Berikut ini adalah contoh. Di sini 1. untuk workers berarti bahwa anda perlu untuk menggunakan satu pekerja (bisa diganti dengan 10). Dan unit memiliki log berarti bahwa penebangan diaktifkan (dan hanya dapat diganti ke 0 untuk menonaktifkan):

my $config = {
    workers => 1,
    log => 1,
};

Artikel lainnya