2010-08-29 21 views
5

Tôi đang viết một kịch bản perl, và trong phần tôi đang kiểm tra các tùy chọn mà người dùng đã cung cấp trên dòng lệnh, tôi muốn thoát với một lỗi giải thích những gì đã xảy ra với các tùy chọn. Trong trường hợp này, không cần một dấu vết ngăn xếp để đi cùng với thông báo lỗi này. Vì vậy, cách tốt nhất để chết với một thông báo lỗi là gì nhưng không có dấu vết ngăn xếp hoặc thông tin gỡ lỗi?Cách chính xác để chết với một lỗi nhưng không có một dấu vết ngăn xếp trong perl là gì?

Tôi đã thử những điều sau đây:

die "Invalid options"; 

trong đó sản xuất

Invalid options at myscript.pl line 49. 

Sau đó, tôi đã cố gắng

use Carp; 
... 
croak "Invalid options"; 

trong đó sản xuất

Invalid options at myscript.pl line 47 
    main::prepare_output_directory() called at myscript.pl line 546 

Vậy làm thế nào tôi có thể chết chỉ với Invalid options và không có gì khác?

Câu hỏi bổ sung: tại sao croak cho tôi biết rằng lỗi ở dòng 47, khi cuộc gọi thực tế đến croak là trên dòng 49?

+1

lại: câu hỏi tiền thưởng, hiển thị thêm ngữ cảnh cho croak của bạn? – ysth

+0

Đừng bận tâm đến câu hỏi tiền thưởng. Tôi chỉ tự hỏi liệu có thể có lý do chung nào đó không. –

+0

Đối với câu hỏi thưởng của bạn: 'croak' cố gắng báo cáo số dòng từ phối cảnh của người gọi. Đọc tài liệu cho mô-đun [Cá chép] (http://perldoc.perl.org/Carp.html). –

Trả lời

18

Chỉ cần đặt một dòng mới vào cuối die chuỗi:

die "Invalid options\n"; 

Điều đó sẽ ngăn chặn vị trí của lỗi từ được gắn vào thông điệp của bạn.

+20

Tôi đoán họ đọc tài liệu. [perldoc -f die] (http://perldoc.perl.org/functions/die.html) –

+1

Tôi muốn có một cách để làm tương tự với 'croak'. Sự hiểu biết của tôi là ngữ nghĩa, 'chết' là cho các lỗi nội bộ, trong khi' croak' là lỗi do một cái gì đó bên ngoài gây ra. Trong trường hợp này, tôi muốn chỉ ra rằng người dùng đã nhập các tùy chọn không hợp lệ, điều này rõ ràng là trường hợp của tùy chọn sau. Tuy nhiên, tôi phải chết thay vì cằn nhằn để ngăn chặn các backtrace. –

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