2009-06-21 27 views
6

Làm cách nào để kiểm tra xem biến có giá trị cụ thể trong Perl không? Có một lệnh để ngừng thực thi một kịch bản để tìm kiếm một số biến của nó?Làm thế nào tôi có thể có các xác nhận biến trong Perl?

Tôi tự hỏi nếu tôi có thể sử dụng các thực hành Pythonic chèn:

assert 0, (foo, bar) 

để kịch bản debug một cách debuger-less?

Trả lời

2

Có một tập lệnh tại PerlMonks giới thiệu phương pháp xác nhận nhanh.

Tốc độ là quan trọng vì Perl được hiểu và bất kỳ kiểm tra nội tuyến sẽ ảnh hưởng đến hiệu suất (không giống như các macro C đơn giản ví dụ)


Tôi không chắc chắn nếu những điều này sẽ được trực tiếp sử dụng được.


Ok! Đây là những gì tôi đang tìm kiếm - PDF Warning: Test-Tutorial.pdf. Các Test::Harness được sử dụng để viết các bài kiểm tra mô-đun Perl.

10

Tìm kiếm CPAN nhanh chóng gợi ý Carp::Assert.

+1

+1 để nhập nhiều ký tự nhanh hơn tôi đã làm. Tôi sẽ chỉnh sửa URL là phiên bản bất khả tri. –

+0

Tôi sẽ bình luận về câu trả lời của bạn về kết thúc ảnh. Đối với URL, tôi liên tục quên điều đó, vì vậy cảm ơn. – Telemachus

5

Smart::Comments rất tuyệt.

+0

Smart :: Comments ++ Khi được sử dụng với công tắc -ENV, đây là một công cụ tuyệt vời cho loại điều này. Tốt hơn nhiều so với việc phải loại bỏ tất cả các thử nghiệm trước khi đi sản xuất, như một người khác đã đề xuất. – RET

1
$var_to_check =~ /sometest/ or die "bad variable!"; 

Tôi có xu hướng ném những thứ như thế này vào mã của tôi và sau đó sử dụng tìm và thay thế để loại bỏ chúng (trong mã sản xuất).

Ngoài ra, 'eval' có thể được sử dụng để chạy phần mã và lỗi chụp và có thể được sử dụng để tạo chức năng xử lý ngoại lệ. Nếu bạn đang khẳng định rằng một giá trị không phải là 0, có lẽ bạn muốn ném một ngoại lệ và xử lý trường hợp đó theo một cách đặc biệt?

0
if ($next_sunrise_time > 24*60*60) { warn("assertion failed"); } # Assert that the sun must rise in the next 24 hours. 

Bạn có thể thực hiện việc này nếu bạn không có quyền truy cập vào Perl 5.9 cần thiết cho Carp::Assert.

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