2012-10-29 3 views
2

저는 펄의 조각을 만드는 데 아주 고생했습니다.perl은 텍스트 블록을 대체합니다.

나는 "(`CONFM4_AST_MODULES"와 " ')"내가 그래서 난 사이에 모든 일치에 생각이 모든 블록을 다시 할 수 있어야 이제 다음

define(`CONFM4_AST_MODULES', `NOLOAD => app_thingie.so 
    NOLOAD => app_thingie2.so 
    NOLOAD => app_thingie3.so') 

가 포함 된 파일을 삭제 한 다음 다시 추가하십시오. 파일 끝에. 이런 식으로 정규식을 적용 할 수 있습니까? 그렇다면 어떻게?

가끔 내 Perl 스크립트의 전체 텍스트를 하드 코드 할 수 없습니다.

당신은 내가 그것을 또한

(20)

답변

2

3에서 파일 변경에 존재 thingies의 수를 :) 듣고이 문제를 해결하는 방법에 대한 다른 아이디어가있는 경우 네, 그렇습니다 가능한. 당신은 변수로 전체 파일을 읽고 교체 작업을 수행 할 수 있습니다

my $var = do { local $/; <> };       # Read in the file. 
my $re = qr/(define\(`CONFM4_AST_MODULES',[^)]+\)\n?)/; # How to search for the defines. 
my @defs = $var =~ /$re/g;        # Remember the defines. 
$var =~ s/$re//g;          # Remove them. 
print $var, @defs; 

업데이트 : 코드 개선 및 테스트.

+0

"join q(), <>;" 일부는 무엇입니까? 그리고 $ var는 이미이 예제에서 텍스트로 채워져 있다고 가정합니다. – Hydrosine

+0

아니요,'<>'는 파일에서 줄을 읽습니다.'join'은 줄을 하나 만듭니다. – choroba

+0

@Hydrosine : 코드를 더 전통적인 관용어로 업데이트했습니다. – choroba

관련 문제