Perl 맵에서 아무것도 반환하지 않는 이유는 무엇인가요?
다음 문을 실행할 때
@filtered = map {s/ //g} @outdata;
를 실행하면 예상했던 필터링된 목록 대신 빈 목록이 반환됩니다. 제가 하고자 하는 것은 문자열 배열(XML 파일)에서
가 있는 모든 항목을 제거하는 것입니다.
분명히, 나는 무언가를 이해하지 못하고 있습니다. 누구든지이 작업을 수행하는 올바른 방법과 이것이 저에게 그대로 작동하지 않는 이유를 말해 줄 수 있습니까?
5
7
맵은 소스 배열도 수정한다는 점에 유의하세요. 따라서 둘 중 하나를 사용할 수 있습니다:
를 사용하여 @filtered 변수를 완전히 건너뛰거나 원본을 유지해야 하는 경우입니다,
이 경우 foreach를 사용하는 것이 더 가독성이 높을 수 있습니다:
이렇게 해보세요:
문제는 perl의 s 연산자가 $_를 수정하지만 실제로는 변경한 횟수를 반환한다는 것입니다. 따라서 끝에 $_를 추가하면 perl이 @outdata의 각 요소에 대해 수정된 문자열을 반환하게 됩니다.
39 에 문제가 있는 것으로, 원래 배열을 수정하십시오 오토메이티드 greg& s $ _ 로 가칭된 전달됩니다. 합니다.
39 의 후속 조치를 할 수 있는 점, 또한 Tithonium& 의심하게 된다.
이 " local"; # 39 는 you&, re working on a copy) 가 아닌 원본.
펄 (perl) 에서 5.14 수정자의 /r regex 를 사용할 수 있습니다 ([제조업체 비파괴적인 대체] http://perldoc.perl.org/perl5140delta.html # 정규 표현식).
Greg의 답변에 대한 반론으로, grep을 잘못 사용할 수 있습니다:
하지 마세요.