2012-04-02 4 views
0

Perl에서 변수 내부의 패턴을 검색해야합니다. 패턴도 변수 안에 있어야합니다. 여기 내가 가진 무엇인가.Perl의 grep 내부 변수

opendir(DIR,"reports/"); 
$poolname = $poolname."_"; 
@FILES= grep {/^$poolname\.[0-9]*.csv/} readdir(DIR); 
@sorted= reverse sort @FILES; 

의 I 일치시킬 패턴을 poolname_ [0-9] * (I 여기에 풀에 대한 최신 보고서를 얻으려고 [0-9] * 파일의 유닉스 타임 스탬프입니다)

하지만 위의 정규 표현식이 예상대로 작동하지 않습니다. $ sorted [0]에 필요한 파일 이름이 없습니다. 위의 코드에 어떤 문제가 있는지 알 수 있습니까?

다음
my $poolname = "poolname"; 

은 당신 말을 찾고 있습니다 :

poolname_[0-9]*   # Presumably, poolname_[0-9]*.csv in fact 

하지만 정규식가 검색 질문에서 미리보기 전에 그 곳을 가정

+1

PERL이 아닌 Perl입니다. 두문자어가 아닙니다. –

+0

ok :) 실용적인 추출 및보고 언어라고 생각했습니다. – gkns

+1

스크립트 상단에'use strict;'와'use warnings '이 있습니까? 한눈에 내가'poolname_'을 정규 표현식에 직접 넣을지라도 나는 아무 것도 볼 수 없습니다. –

답변

4

에 할당 해당하는이 :

poolname_\.[0-9]*.csv # Probably should have a backslash before the .csv 

찾는 패턴은 정규식과 일치하지 않습니다. \.을 제거하여 필요한 결과를 얻으십시오.

opendir(DIR,"reports/") or die "$!"; 
@FILES = grep { /^${poolname}_[0-9]*\.csv/ } readdir(DIR); 
@sorted = reverse sort @FILES; 
closedir(DIR); 

감안할 때 디렉토리 reports가 포함 된 파일 :

x_1332827070.csv 
x_1333366051.csv 
x_1333A66051.csv 
y_1332827070.csv 

이 스크립트 :

x_1333366051.csv 
x_1332827070.csv 
:

#!/usr/bin/env perl 
use strict; 
use warnings; 

my $poolname = "x"; 
opendir(DIR,"reports/") or die "$!"; 
my @FILES = grep { /^${poolname}_[0-9]*\.csv/ } readdir(DIR); 
my @sorted = reverse sort @FILES; 
closedir(DIR); 

print "$_\n" for @sorted; 

는 출력을 생성

그것이 여러분이 겪은 것이 아니라면, 여러분의 의견과 질문이 오해의 소지가 있습니다.

+0

x_1332827070.csv x_1333366051.csv 등은 파일 이름 – gkns

+0

의 패턴을 나타냅니다. $ {poolname}에서 작동했습니다. 고마워요 :) – gkns