2011-08-04 35 views

Trả lời

5

Luôn luôn sử dụng cảnh báo, đặc biệt là trên một -liners.

Perl không có hằng số đúng hoặc sai, và không có cảnh báo hoặc được kích hoạt nghiêm ngặt, "thanh chặn" (một thứ có thể là hằng số hoặc hàm nhưng không phải) được diễn giải âm thầm dưới dạng chuỗi. Vì vậy, bạn đang thực hiện if("true")if("false") và tất cả các chuỗi khác với "" hoặc "0" là đúng sự thật.

10

Nếu bạn chạy nó với nghiêm ngặt:

perl -Mstrict -e 'if(true) { print 1 }' 

bạn sẽ nhận được lý do:

Bareword "true" not allowed while "strict subs" in use at -e line 1. 

Nó được hiểu là chuỗi "true" hoặc "false" mà luôn luôn là sự thật. Các hằng số không được định nghĩa trong Perl, nhưng bạn có thể làm điều đó cho mình:

use constant { true => 1, false => 0 }; 
if(false) { print 1 } 
8

Bạn đang sử dụng barewords truefalse. Từ trần là một điều xấu. Nếu bạn cố gắng này:

use strict; 
use warnings; 
if (true){print 1} 

Bạn sẽ nhận được một cái gì đó như thế này:

Bareword "true" not allowed while "strict subs" in use at - line 3. 
Execution of - aborted due to compilation errors. 

Bất kỳ giá trị được xác định rằng không giống như 0 được coi là "true". Bất kỳ giá trị không xác định hoặc bất kỳ giá trị nào giống như 0 (chẳng hạn như 0 hoặc "0") được coi là "sai". Không có từ khóa được tích hợp cho các giá trị này. Bạn chỉ có thể sử dụng 01 (hoặc dính ở use constant { true => 1, false => 0}; nếu nó thực sự làm phiền bạn. :)

+0

Tôi porting 4GL mã để Perl 5, và có hằng số giúp. Tôi đã quên mất những thứ đó. Cảm ơn. – octopusgrabbus

Các vấn đề liên quan