If statement
기본적으로 아래와 같이 return 값을 바로 검사하는 방법이 있다.
if(open(DATA, $file)) {
...
} else {
die "Error: Couldn't open the file - $!";
}
Perl 은$! 라는 이름의 variable 에 리턴값을 저장하기 때문에
이런 경우 간단히 아래와 같이 사용할 수 있다.
open(DATA, $file) || die "Error: Couldn't open the file $!";
Unless statement
보통 아래와 같은 방식으로 아래와 같이 나타낼 수 있다.
unless(chdir("/etc")) {
die "Error: Can't change directory - $!";
}
조건이 앞에 나와서 조금 이상하긴 한데 파싱할 때 이걸 제대로 한다는 거니깐 그냥 외우자.
die "Error: Can't change directory!: $!" unless(chdir("/etc"));
삼항 statement
operator? 를 사용해 간단히 print 하는 예이다.
print(exists($hash{value}) ? 'There' : 'Missing',"\n");
warn function
이 함수는 STDERR 을 프린트하지만 다른 액션을 취하지 않아서
내가 원하는 warning 메시지를 출력할 때 사용하면 된다.
chdir('/etc') or warn "Can't change directory";
die function
warn 함수와 비슷하지만 다른 점은 exit 를 즉시 호출한다는 점이다.
이 경우 프로그램은 바로 중단되게 된다.
chdir('/etc') or die "Can't change directory";
carp
carp 은 라인 정보만 리턴하는데 carp 는 call stack 정보도 리턴한다.
exit 함수를 부르지 않는다.
package T;
require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp;
sub function {
carp "Error in module!";
}
1;
function();
Output
Error in module! at C:/EclipseProject/fileCompare/test5.pl line 9 .
T::function() called at C:/EclipseProject/fileCompare/test5.pl line 13
warn in package
같은 함수라도 modules 에서 사용하면 달라진다.
아래와 같은 코드가 있다고 보자.
package T;
require Exporter;
@ISA = qw/Exporter/;
@EXPORT = qw/function/;
use Carp;
sub function {
warn "Error in module!";
}
1;
function();
Output
Error in module! at C:/EclipseProject/fileCompare/test5.pl line 9 .
결과는 위와 같다.
기본 warn 함수와 달리 어떤 파일의 어떤 라인에서 문제가 있는지 보여준다.
croak in package
warn 대신 사용할 만한 함수는 아래와 같다.
경우에 맞게 사용하면 된다. Backtrace 는 Call Stack 을 의미한다.
Abort Backtrace
carp N N
cluck N Y
croak Y N
confess Y Y
#!/usr/bin/perl
package Warning ;
sub warning {
warn "warn";
}
package CWarn ;
use Carp qw(carp cluck);
sub carping {
carp "carp";
}
sub clucking {
cluck "cluck";
}
package Fatal ;
use Carp qw(confess croak);
sub croaking {
croak "croak";
}
sub confessing {
confess "confess";
}
package main ;
Warning::warning();
CWarn::carping();
CWarn::clucking();
Fatal::croaking();
#Fatal::confessing();
|
'Script > Perl' 카테고리의 다른 글
24. Perl Debugging (0) | 2020.01.21 |
---|---|
22. Excel (0) | 2020.01.21 |
21. Directory (0) | 2020.01.21 |
20. System (0) | 2020.01.21 |
19. File (0) | 2020.01.21 |