2013-03-26 2 views
0

내가 (엄격하고 경고 제외) 입력 및 인쇄의 모든 사용을 문 같은 다른 파일을 필요 펄 모듈그렙 또는지도는 펄에서 사용 문을 찾을 수

my @result = grep /use\s+([^;(strict|warnings)]+)/, @file; 

이 인쇄 쓰기를 시도하고있다 :

use Package1; 
use Package2; 

그러나 "패키지 1"부분 만 원합니다. 그래서지도를 사용하는 경우 :이 잘못된 값을 반환

my @result = map /use\s+([^;(strict|warnings)]+)/, @file; 

(처음 2 개 또는 3 문자를 반환)

my @result = map /use\s+([^;]+)/, @file; 

이 Package1, 패키지 2, 엄격한, 경고를 반환합니다..

첫 번째 맵 명령문에서 정규식을 수정하는 방법을 알고 있습니까? grep에서

감사

+0

regexes 및 map/grep을 배우기위한 테스트 사례 일 뿐이며 실제로 use/require 문을 찾으려고합니까? 후자의 경우이를 수행하기위한 모듈이 있습니다. –

+0

@JoelBerger 후자. 저를 올바른 방향으로 가르쳐 주시겠습니까? 덕분에 – psy

+0

Schwern이 나를 이길 것 같습니다. 그것은 내 의견을 거기에서 보았다고 말했다. –

답변

2

던져 필터하기 :

my @result = grep { !/^(?:strict|warnings)$/ } map /use\s+([^;]+)/, @file; 
3

는이 작업을 수행하는 모듈이 있습니다. Perl::PrereqScanner은 무엇입니까 Dist::Zilla 사용하고 꽤 잘 발견했습니다.

그리고 Neil Bowers는 a nice review of the available solutions입니다. 의견을 지적 해 주신 @JoelBerger에게 감사드립니다.

일반적인 Perl 코드 스캔의 경우 Perl 문법을 이해하고있는 PPI을 사용하는 것이 가장 좋습니다. Perl :: PrereqScanner 및 Perl::Critic과 같은 것들을 사용합니다.

+0

'PPI'에 대한 +1 – Zaid

+0

Neil Bowers는이 문제에 대한 좋은 리뷰 기사를 가지고 있습니다 : http://neilb.org/reviews/dependencies.html –