다음 코드 는 본질적으로 내가 원하는 작업을 수행합니다. 변수의 일부를 대체하고 대체 된 값의 일부를 다음에 할당합니다 $foo
.
my $value = "The foo is 42, but the bar is 12!";
my $foo = $+ if $value =~ s/foo is (\d+)//;
print "foo: $foo\n" if $foo;
print $value, "\n";
제 질문은 이것이 "올바른 방법"인지입니다. 특히, 나는 $foo = $+ if ... s/.../.../
구조에 별로 만족스럽지 않고 이것을 할 수 있는 (내가 느끼는) 더 우아한 방법이 있는지 궁금했다.
당신이 어떤 종류의 것을 얻고 있는지 알기는 어렵지만, 그렇게 작성 하지 않는 몇 가지 이유 가 있습니다.
다음과 같이 작성 해서는 안됩니다.
my $foo = $+ if $value =~ s/foo is (\d+)//
결과가 공식적으로 정의되지 않았기 때문입니다. perldoc perlsyn
이 말이있다
주 : (A)의 동작이
my
,state
또는our
문 개질제 조건부 또는 루프 구조로 변형 (예를 들어,my $x if ...
) 정의되지 않는다.my
변수 의 값은,undef
이전에 할당 된 값 또는 다른 모든 것일 수 있습니다. 그것에 의존하지 마십시오.
또한 캡처 변수를 사용하는 $1
것이 더 명확하고 많은 사람들이 무엇을하는지 모를 수 있기 때문에 사용하는 것이 좋습니다 $+
. 그리고 $foo
정의 된 경우보다 대체가 성공했는지 테스트하는 것이 더 설명 적 입니다.
나는 이렇게 쓸 것이다
my $value = "The foo is 42, but the bar is 12!";
if ( $value =~ s/foo is (\d+)// ) {
my $foo = $1;
print "foo: $foo\n";
}
print $value, "\n";
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다