2012-10-09 29 views
20

DướiTại sao phép nhân chuỗi của Perl không cảnh báo trên undef?

use strict; 
use warnings; 
my $foo = undef; 

các biểu thức

$foo . '' 

"$foo" 

cả sản xuất

Use of uninitialized value $foo in ... at ... 

nhưng biểu thức sau đây cho thứ e chuỗi rỗng không có cảnh báo:

$foo x 1 

Bất kỳ ai cũng biết tại sao? Ý tôi là, thật tuyệt khi có một thành ngữ xâu chuỗi tốt đẹp ($_ x 1 ngắn hơn khá nhiều so với defined ? "$_" : ''), nhưng có vẻ hơi lạ.

+2

Tôi chắc chắn nó không cố ý, ít nhất là không phải lúc đầu. – ikegami

+0

'perldoc perlop' (tìm kiếm cho" Phép toán nhân ") không nói bất cứ điều gì về hành vi của' x' với toán hạng bên trái 'undef'. Tôi đồng ý nó có thể không chủ ý. –

Trả lời

9

Tôi đã từng xem một chương trình có cảnh trong lớp học luật. Người hướng dẫn trình bày hai trường hợp tương tự cho học sinh của mình và hỏi tại sao chúng lại dẫn đến các phán quyết khác nhau. Đó là bởi vì các phán quyết đã được thực hiện bởi các thẩm phán, và thẩm phán là những người, cuối cùng ông giải thích.

Điều đó sẽ cảnh báo. Các nhà phát triển làm việc trên Perl là con người. Chạy perlbug để gửi báo cáo lỗi nếu bạn muốn.

+1

+1 dành cho trí tuệ phim/truyền hình. – pilcrow

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