2013-07-17 47 views
6

Sự khác biệt giữa [email protected]$! trong Perl là gì? Lỗi được liên kết với eval được xuất ra bằng cách sử dụng [email protected]. $! cũng được sử dụng để ghi lại lỗi. Vậy sự khác nhau giữa hai người là gì?

Trả lời

14

Từ perldoc perlvar:

Các biến [email protected], $!, $^E, và $? chứa thông tin về các loại khác nhau của điều kiện lỗi có thể xuất hiện trong quá trình thực hiện một chương trình Perl. Các biến được hiển thị theo thứ tự "khoảng cách" giữa hệ thống con báo cáo lỗi và quy trình Perl. Chúng tương ứng với các lỗi được phát hiện bởi trình thông dịch Perl, thư viện C, hệ điều hành hoặc một chương trình bên ngoài tương ứng.

3

$! được đặt khi cuộc gọi hệ thống không thành công.

open my $fh, '<', '/foobarbaz' or die $! 

Điều này sẽ chết xuất ra "Không có tệp hoặc thư mục như vậy".

[email protected] chứa đối số được chuyển đến die. Do đó:

eval { 
    open my $fh, '<', '/foobarbaz' or die $! 
}; 
if ([email protected]) { 
    warn "Caught exception: [email protected]"; 
} 

Nó làm cho không có ý nghĩa để kiểm tra [email protected] mà không sử dụng một số hình thức eval và nó làm cho không cảm nhận để kiểm tra $! khi bạn đã không được gọi là một chức năng mà có thể thiết lập nó trong trường hợp của một lỗi.

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