Переменная внутри grep в Perl - PullRequest
0 голосов
/ 02 апреля 2012

Я должен искать шаблон внутри переменной в Perl.Шаблон также должен быть внутри переменной.Вот что у меня есть:

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

Шаблон, которому я хочу соответствовать, это имя_ пула_ [0-9] * (Я пытаюсь получить последний отчет по пулу здесь. [0-9] *является меткой времени UNIX файла)

Но приведенное выше регулярное выражение не работает должным образом.$ sorted [0] не имеет требуемого имени файла.Могу ли я узнать, что не так с приведенным выше кодом?

1 Ответ

4 голосов
/ 02 апреля 2012

Предполагая, что где-то перед фрагментом в вопросе есть присвоение, эквивалентное:

my $poolname = "poolname";

тогда вы говорите, что ищете:

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

но ваше регулярное выражение ищет:

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

этот скрипт:

#!/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;

производит вывод:

x_1333366051.csv
x_1332827070.csv

Если это не то, что вам нужно, ваши комментарии и ваш вопрос вводят в заблуждение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...