Bagaimana untuk check-in Perl variabel berisi undef

Tugas. Kode dalam bahasa pemrograman Perl adalah variabel. Anda perlu memeriksa apakah nilai variabel ini undef atau tidak.

Keputusan

Sebuah variabel yang berisi undef hanya jika fungsi defined untuk variabel mengembalikan false. Berikut adalah kode yang menampilkan teks jika sebuah variabel berisi undef:

▶ Run
#!/usr/bin/perl

my $foo;

if ( !defined($foo) ) {
    print "foo is undef";
}

Keputusan yang salah

Untuk memeriksa apakah undef dalam variabel yang anda butuhkan untuk menggunakan defined. Tapi sering terjadi apa yang harus memeriksa untuk undef penggunaan lain, cara-cara yang salah.

Berikut ini adalah contoh pertama dari bagaimana untuk tidak melakukannya:

▶ Run
#!/usr/bin/perl

my $foo;

if ( !$foo ) { # error!
    print "foo is undef";
}

Contoh ini adalah benar-benar hanya string foo is undef jika variabel $foo berisi nilai undef, tapi kode cetakan garis ini dalam kasus-kasus lainnya. Misalnya, jika $foo berisi jumlah 0 atau string kosong ''. Kode ini tidak untuk memeriksa bahwa $foo berisi undef, dan periksa bahwa $foo berisi nilai false, dan itu adalah benar-benar tidak sama dengan undef.

Berikut adalah contoh lain dari salah validasi undef:

▶ Run
#!/usr/bin/perl

my $foo;

if ( $foo == undef ) { # error!
    print "foo is undef";
}

Hanya ada semua benar-benar salah. Jika variabel $foo berisi nilai undef, kode ini cetakan tempat foo is undef, tapi kode cetakan garis ini dalam kasus-kasus lainnya. Misalnya, jika dalam sebuah variabel $fooberisi string 'Hello'.

Operator == dimaksudkan untuk perbandingan angka. Sebelum anda membuat perbandingan operator ini mengkonversi argumen untuk angka. Variabel $foo yang undef menjadi nomor 0. Dan undef di sebelah kanan operator juga menjadi nomor 0. Nol adalah nol, kondisi ini dipicu. Tapi nol dan beberapa baris, misalnya 'Hello'.

Jika anda menambahkan kode ini use strict; dan use warnings;, maka Perl akan output foo is undef, tapi hanya membiarkan anda tahu tentang apa yang terjadi pada sesuatu yang aneh:

Use of uninitialized value in numeric eq (==) at script.pl line 8.
Use of uninitialized value $foo in numeric eq (==) at script.pl line 8.
foo is undef

Secara Umum, itu adalah selalu sebuah praktek yang sangat baik untuk selalu menggunakan use strict; dan use warnings;.

Topik terkait

Artikel lainnya