Một cuộc thảo luận ở số another question khiến tôi băn khoăn: hệ thống ngoại lệ của các ngôn ngữ lập trình khác có những thiếu sót của Perl?Điều gì đã xảy ra với ngoại lệ trong Perl?
trường hợp ngoại lệ được xây dựng trong Perl là một chút ad-hoc ở chỗ họ, giống như hệ thống đối tượng Perl 5, sắp xếp của bolted trên là một suy nghĩ, và họ quá tải các từ khóa khác (eval
và die
) là không dành riêng cho trường hợp ngoại lệ.
Cú pháp có thể hơi xấu xí, so với ngôn ngữ có cú pháp kiểu try/throw/catch được tạo sẵn. Tôi thường làm như sau:
eval {
do_something_that_might_barf();
};
if (my $err = [email protected]) {
# handle $err here
}
Có một số mô-đun CPAN cung cấp cú pháp đường để thêm từ khóa cố gắng/nắm bắt và cho phép dễ dàng khai báo phân cấp lớp ngoại lệ và điều gì.
Vấn đề chính mà tôi thấy với hệ thống ngoại lệ của Perl là sử dụng đặc biệt [email protected]
toàn cầu để giữ lỗi hiện tại, chứ không phải là một cơ chế kiểu catch
chuyên dụng có thể an toàn hơn. cá nhân gặp phải bất kỳ vấn đề nào với việc [email protected]
bị hất.
Có lẽ những người như ngôn ngữ lập trình khác thực hiện nhiều sai lầm. – mob
Ôi trời, tôi vừa nói to như thế? Chỉ đùa thôi! – mob
Vâng, các ngôn ngữ khác có ngoại lệ và Perl thì không. Đó là sự khác biệt. Rằng chúng tôi giả mạo họ không làm cho Perl thực sự có ngoại lệ. –