2017-10-05 3 views
-3

예 :Perl : 대체로 대체되지 않고 입력을 전달하는 방법 s /// 연산자?

$ test = "abc";
$ test = ~ s/b // g;

정상적으로 테스트됩니다. 이 테스트를 통과하고 여전히 abc를 반환하도록 문자열 "abc"를 어떻게 조작합니까?

명령 삽입을 시도하므로 $ test = ~ s/b // g을 변경할 수 없습니다. 그러나 입력을 변경할 수 있습니다.

바라건대 말이 되네.

+0

난 당신이 '기본 사항'로 시작하는 기존의 출발점, 펄 https://perldoc.perl.org/perlre.html을 읽으십시오. –

+0

당신이 무엇을 요구하고 있는지 불분명합니다. 다음 중 하나를 요구할 수 있습니다. 결과에서 일치하는 부분을 유지하면서 대체를 수행하는 방법 또는 대체가없는 방법과 일치시키는 방법 또는 새 대상 변수에 효과가 나타나도록 대체를 수행하는 방법 원래 목표보다 – DavidO

+0

'pos ($ test) = length ($ test); ' – ikegami

답변

1

/r 한정자를 사용하려고합니다. 이전 버전이

$test = "abc"; 
my $str= $test =~ s/b//gr; 

http://perldoc.perl.org/perlre.html#Modifiers

+0

문자열 abc 만 변경할 수 있다고 가정합니다. 어떻게할까요? – user5454895

+0

$ test = ~ s/b // g;가 아니라면 "failed"가 출력됩니다. – hoffmeister

+0

@ user5454895 아직 어떤 의미인지는 분명하지 않습니다. 문자열을 변경할 수 없습니다. 리터럴 값입니다. 문자열이 'abc'와 같은 경우에는 변수가 변경되지 않도록하고 싶지 만 다른 경우에는 변경할 수 있습니다. ? 또는 'abc'가 예제 일 뿐이며 테스트 할 때 값에 관계없이 문자열을 변경하지 않으려 고합니다. 평범한 영어로 된 규칙은 정확히 무엇입니까? –

0

b 포함 된 문자열을 발생합니다 당신이 s/b//g에 전달할 수있는 문자열은 없습니다를 실행하지 않도록 그것은 new'ish 기능입니다.

그러나 값이 아니라 $test에 대한 액세스 권한이있는 경우 대체 연산자가 찾을 수 없도록 pos을 설정할 수 있습니다. 그것은 이것과 더 많은 유용한 것들을 포함 -

$ perl -e' 
    my $test = "abc"; 
    pos($test) = length($test); 
    $test =~ s/b//g; 
    CORE::say($test); 
' 
ac 
관련 문제