Всем привет!Хочу сказать сразу, сегодня Perl увидел в первый раз.
Задача следующая:
Есть файл SN.txt, в котором построчно записаны серийники оборудования(один серийник - одна строка). Есть папка содержащая диагностические выдачи оборудования Cisco(sh tech).
Надо из всех файлов диагностических выдач отобрать только те, в которых содержится серийные номера из файла SN.txt.
После курения мануалов по perl получился вот такой монстр:
#!/usr/bin/perl
use File::Copy;
$dir = "test"; # вставить имя папки с диагностическими выдачами (регистр учитывается).
$dir_prepared = "right_dev";
$snfile = "SN.txt"; # вставить путь до файла с серийниками
$sn = "";
$shtechfilename = "";
if (! -d $dir_prepared) {
mkdir($dir_prepared)
}
open (FILESN,$snfile) or die $!; # открываем файл с серийнками на чтение
while(defined ($sn = <FILESN>)) { # присваиваем переменой $sn значение
opendir(DIR,$dir); # открываем папку с диагностическими выдачами
while ($shtechfilename = readdir DIR) { присваиваем переменной $shtechfilename имя файла
open (FILESH, $shtechfilename); # открываем файл с именем $shtechfilename
while (<FILESH>){
if (/$sn/){ # проверка на наличие в файле $shtechfilename серийника $sn
move(\*FILESH, "$dir_prepared") || die "Move failed: $!"; №перемещение нужного файла в папку
last;
};
};
close FILESH;
};
closedir DIR;
};
Close FILESN;
и этот монстр отказывается работать.
Если добавить оператор print "$sn" в цикл while ($shfilename = <FILESH>) перед конструкцией if, то ничего не выводиться.
Народ я запутался. Подскажите что не так в этом скрипте?