2012-06-25 2 views
2

가능한 중복 : 당신이 찾아내는 경우이 질문의 제목을 수정 무료 떨어졌다하십시오
How do I perform a Perl substitution on a string while keeping the original?
Perl: Use s/ (replace) and return new string변수에 정규 표현식으로 수정 다른 변수의 결과를 할당

그것을 설명하는 더 좋은 방법입니다.

우리가 상상 : 나는 1과 동일 나는이 일이 말을 '매칭과 성공 교체'하는 상상을 발견하면서

my $foo = something; 
    my $newfoo = $foo =~ s/.*/something else/; 

나는, 내가 $newfoo = something else있을 것이다 생각했다.

my $foo = something; 
    my $newfoo = $foo; 
    $newfoo =~ s/.*/something else/; 

첫 번째 변수를 수정하지 않고 정규 표현식의 결과에 새로운 변수를 만들 즉, 동일한 작업을 수행 할 수있는 방법이없이, 거기 :

내가 찾은 유일한 해결책은 필연이다 중간 단계?

+1

두 개의 코드 단편은 서로 다른 의미를가집니다. 처음에는 '$ foo'가 수정되었지만 두 번째에는 수정되지 않았습니다. 어떤 행동을 원하니? –

+0

일부 변수 A에 대해 변수 A에서 정규식 찾기 - 바꾸기의 결과 인 새 변수 B를 만드는 방법을 묻는 중입니까? –

+0

@WilliamPursell, $ foo를 저장하고 $ newfoo를 정규 표현식의 결과로 설정하려고합니다. – Zagorax

답변

3

당신은 할당하고 괄호의 현명한 사용과 펄의 모든 버전에서 대체를 수행 할 수 있습니다 : 펄 v5.14를 사용

(my $newfoo = $foo) =~ s/.*/something else/; 

가 저장 그렇지 않으면 임시 할당을 고수해야합니다 이 경우 한 번의 키 입력 만 가능합니다 (v5.14에는 다른 이점이있을 수 있음).

5

perl 5.14 이상을 사용하는 경우이 방법이 유용합니다. non-destructive substitution이라고합니다.

my $newfoo = $foo =~ s/.*/something else/r; 
             ^Add this 
+4

perl 5.14 이상을 사용하는 경우 운이 좋은 것으로 생각하십시오. –

+1

감사합니다. 나는이 새로운 기능에 대해 몰랐다. 그러나 ... J-16 SDiZ에 따르면 나는 운이 좋다. : D 좋은 코멘트. – Zagorax

관련 문제