Là những gì đúng và sai trong Perl

Perl ngôn ngữ lập trình đặc biệt không có giá trị đó có ý nghĩa gì đúng và sai.

Bất kỳ giá trị mà Perl có thể giải thích như một Phép giá trị. Ví dụ, chuỗi 'Hello' là sự thật. Sau mã hiển thị các chuỗi 'true':

▶ Run
#!/usr/bin/perl

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

Giá trị gì là sai

Perl ngôn ngữ có 5 giá trị đó là sai. Này:

  • undef
  • 0 — 0
  • 0.0 — số 0.0
  • '' — chuỗi rỗng
  • '0' — hàng 0

Đây là một ví dụ cho thấy rằng tất cả những giá trị này được giải thích của Perl như một lời nói dối. Mã sẽ hiển thị 5 lần từ 'false':

▶ Run
#!/usr/bin/perl

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

Giá trị gì là đúng

Sự thật là tất cả các giá trị, ngoại trừ những 5 điều đó là sai.

Quy tắc

Để nhớ những gì là sai, bạn có thể sử dụng những quy tắc: "Tất cả những gì 0 là sai khác hơn '0 nhưng sự thật' hàng".

Tất cả những 5 giá trị là sai nếu họ đang sử dụng như trở thành số 0. Đây là mã xác nhận nó, mã hiển thị 5 số không:

▶ Run
#!/usr/bin/perl

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

Tuy nhiên, nếu bạn sử dụng use strict;use warnings; (mà hầu như luôn luôn có giá trị làm), trong trường hợp undef và các chuỗi rỗng Perl sẽ hiển thị cảnh báo.

Đây là mã và kết quả của công việc của mình trong trường hợp 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

Và đây là mã và kết quả trong trường hợp của chuỗi rỗng:

▶ 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

Trong Perl có giá trị như vậy trong một Phép bối cảnh đó là sự thật, nhưng khi được sử dụng trong như số chuyển đổi thành số không. Tất cả những giá trị được dây.

Ví dụ, chuỗi '0ASDF' là một ví dụ về giá trị. Khi sử dụng như một giá trị Lôgic chuỗi này sẽ được coi như là đúng. Thực sự, chỉ có 2 dòng đó, mà là nói dối một chuỗi rỗng và một chuỗi trong đó có chỉ là một nhân vật duy nhất được các con số không, dòng '0ASDF' là không không ai trong hai đường dây, vì vậy nó không phải là một lời nói dối, và sự thật.

Đây là mã cho thấy những dòng '0ASDF' là sự thật, (mã sẽ hiển thị các chuỗi 'true'):

▶ Run
#!/usr/bin/perl

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

Nếu dòng này '0ASDF' sử dụng như một số, nó được xem như là số 0 (tuy nhiên, khi có use strict;, use warnings; sẽ là một cảnh báo):

▶ 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

Các sử dụng nổi tiếng nhất của 0 but true giá trị xảy ra trong Perl CHIẾC thư viện, nó sử dụng chuỗi '0E0'.

Mảng, Băm, Tài Liệu Tham Khảo

Các mảng là sự thật, nếu có ít nhất một giá trị. Nếu trong mảng không có giá trị, sau đó các mảng là sai.

Tương tự, nếu băm có ít nhất một cặp giá trị, sau đó băm là sự thật. Nếu băm là không không có giá trị, nó là một lời nói dối.

Tài liệu tham khảo là luôn đúng, không có vấn đề gì, nó đề cập đến. Thậm chí một tài liệu tham khảo với một mảng trống [] hay trống rỗng băm {} là sự thật.

Một và một chuỗi rỗng

Thường để viết mã sự thật là một số một, và để viết nằm sử dụng các con số không.

Thật thú vị, anh ta tin rằng việc kinh điển Perl giá trị để biểu thị sự nói dối là không phải là số 0, và các chuỗi rỗng ''.

Đây là một ví dụ cho thấy điều này. Chúng tôi đã lấy dòng 'Hello', đó là sự thật, và với những phép toán đơn điều hành ! biến nó thành một lời nói dối:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

print Dumper !'Hello';

Kết quả xuất hiện trên màn hình, các văn bản $VAR1 = '';

Nếu bạn sử dụng sự điều hành ! hai lần, chúng ta có được những kinh điển giá trị cho sự thật từ quan điểm của Perl:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

print Dumper !!'Hello';

(trên màn hình xuất hiện các văn bản $VAR1 = 1;).

Các vấn đề của dễ đọc

Thường để viết mã sự thật là một số một, và để viết nằm sử dụng các con số không. Nhưng, thật không may, từ những con số này không rõ điều này có nghĩa gì — số (và có thể có con số khác), hoặc là một lá cờ có nghĩa là sự thật.

Đây là một ví dụ. Ở đây 1 cho workers có nghĩa là, bạn phải sử dụng một nhân viên duy nhất (có thể được thay thế bởi 10). Và các đơn vị có log có nghĩa là đăng nhập được kích hoạt (và có thể được thay thế chỉ để 0 đến vô hiệu hóa):

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

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