[Perl] 변수로 정규식 패턴을 쓸 때

doldori의 이미지

my $pattern = '(fred|wilma) flintstone';
my $replace = '\\u\\L$1\\E Flintstone';
while (<>)
{
    s/$pattern/$replace/g;
    print;
}

이렇게 할 때 $replace의 문자열이 메타캐릭터로 동작하지 않고 단순한 스트링으로
처리됩니다. 위의 코드에서 "fred flintstone"을 입력하면 "\u\L$1\E Flintstone"을
출력한다는 거죠. 제가 원하는 출력은 "Fred Flintstone"인데 말이죠.
이런 걸 하려면 perlfaq를 보라고 하는데 살펴봐도 못찾겠습니다.
$replace를 메타캐릭터로 동작하게 하려면 어떻게 해야 하나요?
익명 사용자의 이미지

doldori wrote:
my $pattern = '(fred|wilma) flintstone';
my $replace = '\\u\\L$1\\E Flintstone';
while (<>)
{
    s/$pattern/$replace/g;
    print;
}

이렇게 할 때 $replace의 문자열이 메타캐릭터로 동작하지 않고 단순한 스트링으로
처리됩니다. 위의 코드에서 "fred flintstone"을 입력하면 "\u\L$1\E Flintstone"을
출력한다는 거죠. 제가 원하는 출력은 "Fred Flintstone"인데 말이죠.
이런 걸 하려면 perlfaq를 보라고 하는데 살펴봐도 못찾겠습니다.
$replace를 메타캐릭터로 동작하게 하려면 어떻게 해야 하나요?

${$replace} ???????
leigh의 이미지

doldori wrote:
my $pattern = '(fred|wilma) flintstone';
my $replace = '\\u\\L$1\\E Flintstone';
while (<>)
{
    s/$pattern/$replace/g;
    print;
}

이렇게 할 때 $replace의 문자열이 메타캐릭터로 동작하지 않고 단순한 스트링으로
처리됩니다. 위의 코드에서 "fred flintstone"을 입력하면 "\u\L$1\E Flintstone"을
출력한다는 거죠. 제가 원하는 출력은 "Fred Flintstone"인데 말이죠.
이런 걸 하려면 perlfaq를 보라고 하는데 살펴봐도 못찾겠습니다.
$replace를 메타캐릭터로 동작하게 하려면 어떻게 해야 하나요?

$pattern = '(fred|wilma) flintstone'; 
$replace = '"\u$1 Flintstone"'; 

$_ = "fred flintstone";

s/$pattern/$replace/ee; 
    
print; 

뉴스그룹에서 겨우 답을 찾았답니다. 저도 예전에 이걸로 고민한 적이 있는지라.... /e 옵션으로 execute시켜서 정규식 객체로 만들어주는 것이 관건이네요.

$replace literal에 '다음에 "가 있는 것에 유의하세요.

...

doldori의 이미지

leigh wrote:
$pattern = '(fred|wilma) flintstone'; 
$replace = '"\u$1 Flintstone"'; 

$_ = "fred flintstone";

s/$pattern/$replace/ee; 
    
print; 

뉴스그룹에서 겨우 답을 찾았답니다. 저도 예전에 이걸로 고민한 적이 있는지라.... /e 옵션으로 execute시켜서 정규식 객체로 만들어주는 것이 관건이네요.

$replace literal에 '다음에 "가 있는 것에 유의하세요.


정말 감사합니다. :D