펄 오류 처리
프로그램을 실행하면 존재하지 않는 파일을 여는 등의 다양한 오류가 항상 발생합니다.
프로그램 실행 중 오류가 발생하면 프로그램이 중지됩니다. 오류를 방지하고 프로그램이 종료되는 것을 방지하려면 몇 가지 감지 방법을 사용해야 합니다.
Perl은 오류 처리를 위한 다양한 방법을 제공하며, 이어서 하나씩 소개하겠습니다.
if 문
if 문은 문의 반환 값을 결정할 수 있습니다. 예는 다음과 같습니다.
if(open(DATA, $file)){ ... }else{ die "Error: 无法打开文件 - $!"; }
변수 $ !가 오류 정보를 반환했습니다. 위 코드를 다음 코드로 단순화할 수도 있습니다:
open(DATA, $file) || die "Error: 无法打开文件 - $!";
unless function
unless 함수가 if의 반대인 경우에만 false를 반환합니다. 표현식은 다음과 같이 실행됩니다:
unless(chdir("/etc")){ die "Error: 无法打开目录 - $!"; }
unless 문은 오류 알림을 설정하려는 경우 매우 유용합니다. 위 코드를 다음과 같이 축약할 수도 있습니다.
die "Error: 无法打开目录!: $!" unless(chdir("/etc"));
위 오류 메시지는 디렉터리 전환에 오류가 있는 경우에만 출력됩니다.
삼항 연산자
다음은 삼항 연산자의 간단한 예입니다.
print(exists($hash{value}) ? '存在' : '不存在',"\n");
위 예에서는 삼항 연산자를 사용하여 해시 여부를 결정했습니다. 가치가 존재합니다.
인스턴스에는 두 개의 값이 있는 표현식이 포함되어 있습니다. 형식은 expression ? 값 1: 값 2 입니다.
warn 함수
warn 함수는 경고 메시지를 트리거하는 데 사용되며 일반적으로 STDERR(표준 출력 파일)로 출력됩니다. 사용자에게 프롬프트:
chdir('/etc') or warn "无法切换目录";
die function
die 함수는 warning과 유사하지만 종료를 실행합니다. 일반적으로 사용되는 오류 메시지 출력:
chdir('/etc') or die "无法切换目录";
Carp 모듈
Perl 스크립트에서 오류를 보고하는 일반적인 방법은 warning() 또는 die() 함수를 사용하여 보고하거나 생성하는 것입니다. 실수. Carp 모듈의 경우 특히 모듈 내에서 생성된 메시지에 대한 추가 제어 수준을 제공합니다.
표준 Carp 모듈은 오류 위치를 제공하는 데 더 유익하고 친숙한 warning() 및 die() 함수에 대한 대안을 제공합니다. 모듈 내에서 사용될 경우 모듈 이름과 줄 번호가 오류 메시지에 포함됩니다.
carp 함수
carp 함수는 warning 함수와 유사하게 프로그램의 추적 정보를 출력할 수 있으며 일반적으로 정보를 STDERR로 보냅니다.
package T; require Exporter; @ISA = qw/Exporter/; @EXPORT = qw/function/; use Carp; sub function { carp "Error in module!"; } 1;
다음을 호출합니다. 스크립트의 프로그램:
use T; function();
는 위 프로그램을 실행하고 출력 결과는 다음과 같습니다.
Error in module! at test.pl line 4
cluck 함수
cluck()는 warning()과 유사하며 다음을 제공합니다. 오류가 발생한 위치의 스택 추적입니다.
package T; require Exporter; @ISA = qw/Exporter/; @EXPORT = qw/function/; use Carp qw(cluck); sub function { cluck "Error in module!"; } 1;
스크립트에서 다음 프로그램을 호출하세요.
use T; function();
위 프로그램을 실행하면 출력 결과는 다음과 같습니다.
Error in module! at T.pm line 9 T::function() called at test.pl line 4
croak 함수
croak() 및 die() 마찬가지로 스크립트를 종료할 수 있습니다.
package T; require Exporter; @ISA = qw/Exporter/; @EXPORT = qw/function/; use Carp; sub function { croak "Error in module!"; } 1;
는 스크립트에서 다음 프로그램을 호출합니다.
use T; function();
위 프로그램을 실행하면 출력 결과는 다음과 같습니다.
Error in module! at test.pl line 4
confess 함수
confess() 및 die() 유사하지만 오류가 발생한 위치에서 스택 추적을 제공합니다.
package T; require Exporter; @ISA = qw/Exporter/; @EXPORT = qw/function/; use Carp; sub function { confess "Error in module!"; } 1;
스크립트에서 다음 프로그램을 호출합니다.
use T; function();
위 프로그램을 실행하면 출력 결과는 다음과 같습니다.
Error in module! at T.pm line 9 T::function() called at test.pl line 4