2013-11-15 4 views
0

나는 perl 구문에 어려움을 겪고 있습니다. 나는 다른 프로젝트의 소스 코드에서 큰 조건부 대체를 수행하기에 충분한 것을 배우려고 노력하고 있지만 문제가 계속되고있다. 내 문제를 테스트하기위한 간단한 스크립트를 작성했는데이 스크립트가 제대로 작동했습니다. 나는 파일에 그것을 시도하고 더 이상 일하지 않았다. 파일에 내 테스트 문자열과 동일한 텍스트가 포함되어 있습니다.파일에서 문자열을 검색하는 perl 구문

나는 파일에서 특별한 것을 읽어야한다고 생각하지만, 무엇에 관해서는 단서가 없다.

test.sh :

#!/usr/bin/perl 
use strict; 
use warnings; 


my $matching = 'Logger\.getInstance\(\)\.addEntry\(((.|\n)*),((.|\n)*),((.|\n)*),((.|\n)*)\)'; 
my $replacement = '"Logger\.getInstance\(\).addEntry\($1,$7\)"'; 

my $test_str = "Logger\.getInstance\(\)\.addEntry\(\"error\", \"Thing2D\.PATH_TYPE\", new Object\(\) \{\}\.getClass\(\)\.getEnclosingMethod\(\)\.getName\(\), \"New PATH_TYPE was added and not filled in\.\");"; 


print "----\nstring:\n" . $test_str . "\n\nreplaced:\n\n"; 

$test_str =~ s/$matching/$replacement/ee; 
print "\n\n" . $test_str . "\n\n\n"; 


die qq[Usage: perl $0 <subject_file>\n] unless @ARGV == 1; 

open my $fh_subject, qq[<], shift @ARGV or die qq[Cannot open input file: $!\n]; 

my $subject_content; 
{ 
    local $/ = undef; 
     $subject_content = <$fh_subject>; 
} 

print "----\nString:\n" . $subject_content . "\n\nreplaced:\n\n"; 

$subject_content =~ "s/$matching/$replacement/ee"; 
print $subject_content; 

있는 test.txt :

Logger.getInstance().addEntry("error", "Thing2D.PATH_TYPE", new Object() {}.getClass().getEnclosingMethod().getName(), "New PATH_TYPE was added and not filled in."); 

명령 행 :

./test.sh test.txt 

이 도와 주셔서 감사합니다!

답변

4
$subject_content =~ s/$matching/$replacement/ee; 

대신

$subject_content =~ "s/$matching/$replacement/ee"; 
+0

의 나는 간단한 것을 알고 있었다! 고맙습니다. 내가하는 반복적 인 작업을 위해 진주를 조금 배우려고합니다. 이것은 많은 도움이됩니다! – vextorspace

관련 문제