Làm thế nào để kiểm tra trong Perl một biến chứa undef

Nhiệm vụ. Mã trong ngôn ngữ lập trình Perl là biến. Anh cần phải kiểm tra xem các giá trị của biến này undef hay không.

Quyết định

Một biến chứa undef chỉ nếu các chức năng defined cho biến trở lại sai. Đây là mã mà hiển thị văn bản nếu biến chứa undef:

▶ Run
#!/usr/bin/perl

my $foo;

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

Những quyết định sai lầm

Để kiểm tra xem undef trong một biến bạn cần phải sử dụng defined. Nhưng nó thường xảy ra cái gì để kiểm tra cho undef sử dụng khác, cách sai lầm.

Đây là ví dụ đầu tiên của làm thế nào để không làm nó:

▶ Run
#!/usr/bin/perl

my $foo;

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

Ví dụ này thực sự chỉ là các chuỗi foo is undef nếu biến $foo có giá trị undef, nhưng mã in dòng này trong trường hợp khác. Ví dụ, nếu $foo chứa số 0 hoặc các chuỗi rỗng ''. Mã này không phải là để kiểm tra xem $foo chứa undef, và kiểm tra điều đó $foo có giá trị sai, và nó là hoàn toàn không giống như undef.

Đây là một ví dụ khác của chính xác xác nhận undef:

▶ Run
#!/usr/bin/perl

my $foo;

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

Chỉ có tất cả hoàn toàn sai lầm. Nếu biến $foo có một giá trị undef, đây in mã nơi foo is undef, nhưng mã in dòng này trong trường hợp khác. Ví dụ, nếu trong một biến $foochứa chuỗi 'Hello'.

Các nhà điều hành == là dành cho so sánh các con số. Trước khi làm cho so sánh này điều hành chuyển đổi của nó tranh luận với các con số. Biến $foo mà là undef trở thành số 0. Và undef các quyền của người vận hành cũng trở thành số 0. Không là không, các điều kiện được kích hoạt. Nhưng không được và một số đường nét, ví dụ 'Hello'.

Nếu bạn thêm mã này use strict;use warnings;, sau đó Perl sẽ ra foo is undef, nhưng chỉ để cho anh biết về những gì đang xảy ra một cái gì đó kỳ lạ:

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

Nói Chung, nó luôn luôn là một người rất tốt, thực hành luôn sử dụng use strict;use warnings;.

Chủ đề liên quan

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