Perl Script застревает - PullRequest
       2

Perl Script застревает

0 голосов
/ 14 октября 2018

У меня есть папка, которая содержит старые файлы, которые необходимо удалить без удаления запущенных файлов.

У меня есть команда в linux для вывода списка запущенных файлов, содержащих имена запущенных файлов.

{"xxxxxx","235235235.filename",{xxx},xxxx,xxxx,xxxx}

Мне просто нужны 235235235.filename s и скрипт для сравнения с файлами в каталоге linux и удаления файлов, которые не совпадают, однако в каталоге также есть xxxxxxxxxxx_235235235.filename s.

Здесьгде я сейчас нахожусь:

#!/usr/bin/perl -w

use strict;
use warnings;
my $dir = "****";
opendir(DIR, $dir) or die "Could not open $dir: $!\n";
my @allfiles = readdir DIR;
close DIR;

foreach my $oldfiles(@allfiles) {
$oldfiles =~ s/^(?>\N*?_)((?<field3>[^\n\r.]*?)\.str)$/$+{field3}/img;

#print "$oldfiles\n";
}

my $cmd ="****";
#my $cmd ="ls";
my @runEvents = `$cmd`;
chomp @runEvents;
print "done.";
foreach my $running(@runEvents) {
$running =~ s/(?<field2>[0-9a-z]{4}_8[0-9a-z]{2}_[0-9a-z]{2}[a-z][0-9a-z]0[0-9]\.str|PICO_8D[0-9]_2{2}6[0-9]-1{2}\.str)|\{"PID 8[0-9a-z]{2}","/$+{field2}/ig;


        print "$running\n";
}

Когда запускается последнее регулярное выражение, я получаю

Использование неинициализированного значения $ + ("field2"} в итераторе подстановки в строке 24.

Кто-нибудь может указать мне правильное направление?

1 Ответ

0 голосов
/ 14 октября 2018

Для нахождения неудачного регулярного выражения я нахожу Regexp :: Debugger очень полезным.Он позволяет вам пошагово проходить регулярное выражение, чтобы вы могли видеть, где ваше регулярное выражение недостаточно общее для ваших входных данных.

Входные данные из вашей программы "запущенных событий" здесь наиболее интересны длядиагностируйте причину сбоя вашего регулярного выражения, но если оно у вас есть, то если поместить его в небольшую тестовую программу, все будет очень просто:

#!perl
use strict;
use warnings;
use Regexp::Debugger;

while(<DATA>) {
    s/(?:(?<field2>[0-9A-Za-z]{4}_8[0-9A-Za-z]{2}_[0-9A-Za-z]{2}[A-Za-z][0-9A-Za-z]0[0-9]\.[Ss][Tt][Rr]|[Pp][Ii][Cc][Oo]_8[Dd][0-9]_2{2}6[0-9]-1{2}\.[Ss][Tt][Rr])|\{"[Pp][Ii][Dd] 8[0-9A-Za-z]{2}","|[",0-9ginru{}]{34,$
};

__DATA__
... the data that your shell script outputs ...

Кроме того, ваше регулярное выражение кажется обрезанным, не могли бы вы обновить своевопрос с правильным регулярным выражением?

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