Perl 예외 처리 eval 사용 방법

펄에서 예외처리는 하는 함수로 eval이 있습니다.

eval로 블럭을 설정해주고 그 안에서 에러가 발생 한 경우 캐치를 해줍니다.

 

블럭 설정

eval { … };

 

블럭 안에 처리하고 싶은 소스를 작성해주면 됩니다.

처리중에 에러가 발생해 갑자기 멈추는 경우 에러를 캐치해서 메세지를 출력하던가 다른 처리를 작성해주고 싶은 경우가 있습니다.

나눗셈 샘플을 보도록 하겠습니다.

my $div1 = 0;

my $div2 = 10;

my $divResult;

$divResult = $div2/$div1;

print "result : " . $divResult;

 

결과

Illegal division by zero at prog.pl line 8.

 

변수 $div1에 0이 저장되어 있습니다.

0으로는 나눗셈을 할 수 없기 때문에 에러가 발생했습니다.

eval로 에러를 캐치해서 에러가 발생한 경우에는 $div1 변수에 값 1을 대입해서 나눗셈을 다시 하도록 변경해보겠습니다.

my $div1 = 0;

my $div2 = 10;

my $divResult;

eval{
  $divResult = $div2/$div1;
};

if($@){
  print "err : " . $@;
  $div1 = 1;
  $divResult = $div2/$div1;
}

print "result : " . $divResult;

 

결과

err : Illegal division by zero at prog.pl line 9.
result : 10

 

나눗셈을 하는 처리를 eval 블럭으로 감싸줬습니다.

블럭이 끝나고 $@ 를 판정하고 있습니다.

$@ 변수는 특수 변수로 eval과 같이 사용됩니다.

eval에서 에러를 캐치한 경우에 $@ 변수에 에러 내용을 저장하게 됩니다.

그렇기 때문에 if($@) 를 사용해 에러가 메세지가 있는 경우에는 if문 안에 처리를 실행하고 에러가 발생하지 않은 경우에는 if문 안에 작성한 처리를 실행하지 않습니다.

eval의 사용 방법을 알아보기 위해 작성한 나눗셈 처리처럼, 처리도중 에러가 발생한 경우 다른 처리를 추가로 해주고 싶은 경우 유용하게 사용할 수 있습니다.

댓글