2013-07-31 22 views
10

Đây là kịch bản Perl của tôi và đầu ra của nó:Tại sao Perl phàn nàn "Sử dụng vô dụng ngữ cảnh không liên tục trong khoảng trống", nhưng thỉnh thoảng?

use strict; 
use warnings; 

(undef, 1); # no output 
(0, 1);  # no output 
(1, 1);  # no output 
(2, 1);  # "Useless use of a constant in void context at C:\...\void.pl line 7" 
(3, 1);  # "Useless use of a constant in void context at C:\...\void.pl line 8" 
("", 1); # "Useless use of a constant in void context at C:\...\void.pl line 9" 
("0", 1); # "Useless use of a constant in void context at C:\...\void.pl line 10" 
("1", 1); # "Useless use of a constant in void context at C:\...\void.pl line 11" 

Tôi mong chờ cảnh báo ở mỗi dòng. Điều gì đặc biệt về undef, 01 điều này khiến điều này không xảy ra?

Trả lời

13

dự liệu trong perldoc perldiag hoàn chỉnh với lý do:

Cảnh báo này sẽ không được cấp cho các hằng số tương đương với 0 hoặc 1 vì chúng thường được sử dụng trong báo cáo như

1 while sub_with_side_effects(); 

Đối với undef, đó là một chức năng có sử dụng ngay cả trong bối cảnh void. ví dụ. undef($x) có chức năng tương tự như — nhưng khác với — $x = undef();. (Bạn thường muốn sau này.) Một cảnh báo có thể được ban hành cho việc sử dụng undef mà không có args trong bối cảnh void, nhưng nó sẽ yêu cầu mã chuyên ngành, và nó chỉ đơn giản là không cần thiết.

+0

Tôi cũng sẽ nói điều này. Nó nói dưới 'Sử dụng vô dụng% s trong ngữ cảnh void' rằng' Cảnh báo này sẽ không được cấp cho các hằng số bằng 0 hoặc 1' http://perldoc.perl.org/perldiag.html#Useless-use-of- % s-in-void-context – chilemagic

+0

Phân tích tốt thông qua tài liệu. Tuy nhiên, không giải thích '(undef, 1)'. (Đang ném đi 'undef' xem xét không ném đi bất cứ điều gì?) –

+0

@Ted Hopp, tôi đã thêm một lời giải thích cho 'undef'. – ikegami

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