undef di Perl

undef dalam bahasa pemrograman Perl adalah salah satu dari nilai-nilai yang terkandung dalam variabel. Jika anda tidak menetapkan nilai ke variabel, variabel yang akan undef.

Berikut adalah contoh program Perl:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my $var;
print Dumper $var;

$var = 123;
print Dumper $var;

$var = undef;
print Dumper $var;

Program ini akan menampilkan:

$VAR1 = undef;
$VAR1 = 123;
$VAR1 = undef;

Pertama kita mendeklarasikan sebuah variabel tetapi belum ditetapkan nilai apapun: my $var;. Kemudian dengan bantuan print Dumper $var; membawa informasi tentang nilai dari variabel ini untuk layar (anda bisa melihat bahwa variabel berisi undef). Setelah itu kita diberikan sejumlah variabel 123dan menunjukkan pada layar. Dan kemudian menggunakan kode $var = undef; kami ditugaskan variabel undef dan lagi membawa informasi tentang hal itu.

undef mungkin menjadi elemen dalam array atau nilai hash:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my @arr = (1, undef, 'three');
print Dumper \@arr;

my %h = (
    a => undef,
);
print Dumper \%h;

Sering undef digunakan sebagai bendera khusus. Misalnya, dapat menjadi sebuah fungsi yang selalu mengembalikan jumlah, tetapi dalam kasus kesalahan kembali undef.

Nama undef berasal dari kata bahasa inggris undefined("undefined").

Dari undef tidak

undef adalah nilai tunggal. Ini bukan sebuah string 'undef', bukan string kosong '' dan itu bukan jumlah 0. Semua nilai-nilai yang berbeda.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

foreach my $var (undef, 'undef', '', 0) {
    print Dumper $var;
}

Dalam kasus hash jika nilai kunci undef tidak sama dengan hash yang ada seperti kunci.

Bagaimana untuk memeriksa undef

Untuk memeriksa apakah nilai undef fungsi ini digunakan defined. Nilai undef jika fungsi defined kembali palsu:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

if (!defined($var)) {
    print 'var is undef';
}

Hal ini sangat mudah untuk menulis Saba is_undef, yang akan mengembalikan true jika itu berlalu undef:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use feature qw(say);
use Data::Dumper;

sub is_undef {
    my ($maybe_undef) = @_;
    return !defined($maybe_undef);
}

my @arr = (1, undef, 'three');

foreach my $el (@arr) {
    say is_undef($el) ? 'undef' : 'not undef';
}

Tapi paling tidak, dan menggunakan fungsi defined tanpa tegap.

Ada cara lain bagaimana untuk memeriksa bahwa sebuah variabel berisi undef adalah untuk menggunakan operator ~~ (operator ini disebut smartmatch). Pernyataan ini muncul di Perl 5.10, tapi dari Perl 5.18 penggunaan operator ini memberikan peringatan Smartmatch is experimental at script.pl line 8.. Berikut ini adalah contoh kode dengan pernyataan ini:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

if ($var ~~ undef) {
    print 'var is undef';
}

Seringkali cara terbaik untuk memeriksa undef adalah fungsi defined.

Perl undef dan konversi ke JSON

Perpustakaan untuk bekerja dengan JSON di Perl mengkonversi Perl nilai undef di null di JSON:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use JSON::PP;

print encode_json {
    a => undef,
};

Kode ini akan menampilkan {"a":null}.

Sebaliknya, ketika mengkonversi dari JSON null menjadi undef:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use JSON::PP;
use Data::Dumper;

print Dumper decode_json '[null]';

Kode ini akan menampilkan:

$VAR1 = [
          undef
        ];

Fungsi ref

Hasil dari fungsi ref sehubungan dengan undef adalah string kosong ''. Dalam hal ini undef tidak berbeda dari string dan angka. Untuk undef, string dan angka fungsi ref mengembalikan string kosong:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

foreach my $el ('asdf', undef, 100) {
    print Dumper ref($el);
}

Nilai Boolean

Ketika menggunakan undef di operasi logis undef adalah sebuah kebohongan. Kode ini akan layar teks false:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

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

Digunakan dengan string

Dalam kasus jika anda menggunakan undef operasi dengan string, bukan undefakan menggunakan string kosong '', tetapi juga menunjukkan peringatan.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

print 'AAA' . $var . 'BBB';
▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

if ($var eq '') {
    print 'equal';
} else {
    print 'not equal';
}

Dalam kasus pertama, peringatan akan ditampilkan Use of uninitialized value in concatenation (.) or string at script.pl line 10., dalam kasus kedua Use of uninitialized value in string eq at script.pl line 8..

Gunakan dengan angka

Dalam kasus jika anda menggunakan undef operasi dengan angka, bukan undefakan digunakan nomor 0. tapi peringatan yang sama muncul.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

print $var + 4;
▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

if ($var == 0) {
    print 'equal';
} else {
    print 'not equal';
}

Dalam kasus pertama, peringatan akan ditampilkan Use of uninitialized value $var in addition (+) at script.pl line 8., dalam kasus kedua Use of uninitialized value $var in numeric eq (==) at script.pl line 8..

Sangat menarik bahwa ketika menggunakan increment operator ++ pemberitahuan no:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

print $var++;

Topik terkait

Artikel lainnya