레이블이 글로빙인 게시물을 표시합니다. 모든 게시물 표시
레이블이 글로빙인 게시물을 표시합니다. 모든 게시물 표시

2013년 9월 11일 수요일

Perl 제대로 배우기 - 12장(Directory Access)

12. Directory Access
디렉토리 트리에서의 이동
  • shell ::  cd
  • system call :: chdir
  • perl :: chdir
ex) chdir(“/etc”) || die “cannot change directory /ect ($!)”;

print “where do you want to go?”;
chomp ($where = <STDIN>);
if (chdir $where){
# success
}else{
# fail
}

글로빙
shell : * 명령행 인수를 받아서 이를 현재 디렉토리에 있는 파일이름의 리스트로 바꾼다.
즉 쉘에서 * 명령행 인수를 실행하는 것과 같다.
@a = </etc/host*>;  --> 정규식 방식
혹은 @a = glob(“/etc/host*”);
만약 존재하지 않으면 공백리스트를 리턴 한다. 그러므로 defined 함수를 사용하여 존재 유무를 파악한다.
복수개의 패턴을 허용함.
while(defined($nextname = </etc/host*>)){
print “one of the files is $nextname\n”;
}

<${var}>를 사용하라 .. <$var>가 아니라.

디렉토리 핸들
- os에서 readdir를 제공할 경우 Perl은 디렉토리 핸들을 제공한다.
디렉토리 핸들 열고 닫기
예)
opendir (ETC,”/etc”) || die “Cannot opendir /etc : $!”; #열기
closedir(ETC); #닫기
디렉토리 핸들 읽기
opendir 이후 readdir를 이용하여 이름 목록을 읽을 수 있다.
** readdir는 단지 파이 이름만을 리턴 한다. 더이상 디렉토리가 없으면 undef를 리턴 한다.
예)
opendir (ETC,”/etc”) || die “no exist etc : $!”;
while ($name = readdir(ETC)){
print “$$name = $name\n”;
}
closedir(ETC);
알파벳 순서로 읽는 방법
foreach $name (sort readdir(ETC)) 로 변경 합니다.
여기서는 . 도 포함 한다. <*>는 .을 포함하지 않는다.