문제

를 실행할 때 다음의 문을:

@filtered = map {s/ //g} @outdata;

그것은 빈 대신 목록의 필터링하는 예상된다.내가 하려는 것은 제거하는 모든이 발생   에서 문자열은(는 XML 파일)입니다.

분명히,나는지 이해 무언가이다.할 수 있는 사람이 나에게 말을 하는 올바른 방법이 될 수 있습,그리고 왜 이 작동하지 않는 나라입니까?

도움이 되었습니까?

해결책

이것을 보십시오:

@filtered = map {s/ //g; $_} @outdata;

문제입니다 s 자에 perl 수정$_지만 실제로의 수를 반환합 변경하였습니다.그래서 추가$_끝에서 발생 perl 를 반환할 수정된 문자열의 각 요소에 대한@outdata.

다른 팁

참고지도를 수정의 원본열니다.할 수 있도록 하나:

map {s/ //g} @outdata;

고 건너뛰@필터링된 변수의 전부,또는 당신을 유지할 필요가 있는 원본

@filtered = @outdata;
map {s/ //g} @filtered;

지만,이 경우에,그것은 더 있을 읽을 수 있는 사용 foreach:

s/ //g foreach @filtered;

그의 대답은 문제는 그것을 수정 원본 배열로$_전달되는 별칭이 지정되었습니다.당신은 필요합니다:

@filtered = map { (my $new = $_) =~ s/ //g; $new} @outdata;

에 따라 Tithonium 의점,이는 또한 목적을 달성할 것이:

@filtered = map {local $_=$_; s/ //g; $_} @outdata;

"로컬 보장"당신이 작업에는 복사,지 않는다.

Perl 에서 5.14 사용할 수 있습니다 /r regex 수정 비파괴 대체.

@filtered = map {s/ //gr} @outdata;
use Algorithm::Loops "Filter";
@filtered = Filter { s/ //g } @outdata;

대위법으로 그의 대답할 수 있습을 오용 grep:

@filtered = grep {s/ //g; 1} @outdata;

이것을 하지 않는다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top