perl 정규 표현식 문제입니다.
글쓴이: dionysos / 작성시간: 금, 2007/08/17 - 3:40오후
use File::Find; my $dir = './source'; find(\&print_if_file, $dir); sub print_if_file { if( -f $_ ) { $targetFileName = $File::Find::name; $targetFileName =~ s/\//\\/g; print "STR = $targetFileName\n"; open( fileHandle, $targetFileName ) || die "cannot open $targetFileName \n"; while( $sLine = <fileHandle> ) { print $sLine; } close( fileHandle ); } }
노가다 작업이 많아서 perl 스크립트를 배우고 있는 중입니다.
실행시키면 해당 하위 폴더인 source에 있는 모든 파일을 리스팅하고
그 파일들을 열어서 어떤 값을 바꿔주는 스크립트를 작성하고 있습니다.
파일을 찾으면 print_if_file 함수를 호출하게 되고 파일 이름이 $File::Find::name에 담기게 됩니다.
그 파일을 열어서 한 라인식 읽어서 다른 값으로 대치 시키려고 하는데
아무래도 파일이 열리지 않습니다.
무엇인 문제인가요?
Forums:
옵션을 줘야 합니다.
File::Find 모듈이 파일을 찾고 해당 작업을 지정할때
기본으로 해당 디렉토리에 들어가 있는 상태로 작업이 됩니다.
위 코드에서 $targetFileName 에 상대경로가 들어 있는데
파일은 해당 디렉토리에 들어간 상태에서 열려고 하니 파일을
못찾는 겁니다.
따라서 File::Find 모듈의 옵션을 사용하여
부분을
이렇게 바꾸고 해보면 될겁니다.
no_chdir => 1 의 의미는 change directory 하지말라는 의미입니다.
no_chdir 옵션을 사용하지 않는다면 파일 열기전에 $targetFileName에서
마지막 /포함 앞부분을 날려버리고 열어도 될겁니다.
자세한 옵션 설명은 File::Find 모듈 문서를 참고하세요.
답변 감사드립니다.
스크립트 언어 첨 배우는 지라 어려움이 많네요.
이게 다 노가다 작업이 원인 ㅠㅠ.
삽질 계속하고 있었는데 명확하게 풀렸네요.
-------------------------------------------------------
노력은 배반하지 않는다.
노력은 배반하지 않는다.
댓글 달기