undef trong Perl

undef trong ngôn ngữ lập trình Perl là một trong các giá trị đó có thể được chứa trong một biến. Nếu bạn không chỉ định một giá trị để biến, biến sẽ được undef.

Đây là một ví dụ Perl chương trình:

▶ 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;

Chương trình này sẽ hiển thị:

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

Đầu tiên, chúng tôi đã tuyên bố một biến nhưng đã không được giao nó bất kỳ giá trị: my $var;. Sau đó, với sự giúp đỡ print Dumper $var; mang thông tin về các giá trị của biến này vào màn hình (bạn có thể thấy rằng biến chứa undef). Sau đó chúng tôi được giao một số biến 123và cho thấy nó trên màn hình. Và sau đó, sử dụng mã $var = undef; , chúng tôi chỉ định biến undef và một lần nữa đưa thông tin về nó.

undef có thể là một yếu tố trong mảng hoặc giá trị trong băm:

▶ 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;

Thường undef được dùng như một lá cờ đặc biệt. Ví dụ, có thể là một chức năng đó luôn luôn trở về một số, nhưng trong trường hợp của lỗi trở về undef.

Tên undef đến từ tiếng anh từ undefined("không xác định").

Hơn undef được không

undef là một duy nhất có giá trị. Đây không phải là một chuỗi 'undef', nó không phải là một chuỗi rỗng '' và nó không phải là số 0. Tất cả những giá trị khác.

▶ Run
#!/usr/bin/perl

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

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

Trong trường hợp của băm nếu các chính trị undef là không giống như băm là không quan trọng như vậy.

Làm thế nào để kiểm tra trên undef

Để kiểm tra xem các giá trị undef hàm được sử dụng defined. Các giá trị là undef nếu các chức năng defined trả sai:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

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

Nó rất dễ dàng để viết một Saba is_undef, mà sẽ trở thành sự thật nếu nó trôi qua 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';
}

Nhưng hầu hết không, và sử dụng các chức năng defined không có bất kỳ đai.

Có một cách khác để làm thế nào để kiểm tra một biến chứa, ngay được để sử dụng sự điều hành ~~ (này điều hành được gọi là smartmatch). Tuyên bố này xuất hiện Perl 5.10, nhưng từ Perl 5.18 sử dụng này điều hành cho một cảnh báo Smartmatch is experimental at script.pl line 8.. Đây là một mẫu mã với tuyên bố này:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

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

Thường là cách tốt nhất để kiểm tra cho undef là một chức năng defined.

Perl undef và chuyển đổi để HỆT

Thư viện để làm việc với phổ Perl chuyển đổi Perl giá trị undef trong null trong MẢNG:

▶ Run
#!/usr/bin/perl

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

print encode_json {
    a => undef,
};

Mã này sẽ hiển thị {"a":null}.

Ngược lại, khi chuyển đổi từ HỆT null trở nên undef:

▶ Run
#!/usr/bin/perl

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

print Dumper decode_json '[null]';

Mã này sẽ hiển thị:

$VAR1 = [
          undef
        ];

Chức năng ref

Kết quả của những chức năng ref đối với undef là một chuỗi rỗng ''. Trong vấn đề này undef không phải là khác nhau từ dây và con số. Cho undef, dây và số chức năng ref trả về một chuỗi rỗng:

▶ Run
#!/usr/bin/perl

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

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

Một giá trị Lôgic

Khi sử dụng undef trong các hoạt động hợp lý undef là một lời nói dối. Mã này sẽ màn hình văn bản false:

▶ Run
#!/usr/bin/perl

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

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

Sử dụng với chuỗi

Trong trường hợp nếu bạn sử dụng undef , hoạt động với chuỗi, thay vì undefsẽ được sử dụng một chuỗi rỗng '', nhưng cũng cho thấy một cảnh báo.

▶ 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';
}

Trong trường hợp đầu tiên, một cảnh báo sẽ được thể hiện Use of uninitialized value in concatenation (.) or string at script.pl line 10., trong lần thứ hai trường hợp Use of uninitialized value in string eq at script.pl line 8..

Sử dụng với các con số

Trong trường hợp nếu bạn sử dụng undef , hoạt động với những con số, thay vì undefsẽ được sử dụng số 0. nhưng cùng một cảnh báo xuất hiện.

▶ 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';
}

Trong trường hợp đầu tiên, một cảnh báo sẽ được thể hiện Use of uninitialized value $var in addition (+) at script.pl line 8., trong lần thứ hai trường hợp Use of uninitialized value $var in numeric eq (==) at script.pl line 8..

Nó là thú vị đó khi sử dụng các tăng điều hành ++ thông báo không:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

print $var++;

Chủ đề liên quan

Các bài viết khác