Сори. Забыл.
Код в общем-то еще в очеь черновом варианте, поэтому не пугайтесь некоторых конструкций - они для дебаггинга.
В общем-то тут наверно стоит привести две функции:
sub GetFiles {
my $month=shift;
GetError("Can\'t find downloads directory by path: $CONFIG{\'path\'}") unless(-d $CONFIG{\'path\'});
my $mnum=MonName($month);
my $year=substr($CONFIG{\'year\'},2,2);
$mnum=$year . $mnum;
opendir(DIR,$CONFIG{\'path\'}) || GetError("Can\'t open downloads directory: $!");
my @FILES=grep(!/^\\.\\.?$/,readdir DIR);
@FILES=grep(/^$mnum/,@FILES);
close(DIR);
@FILES=Compare($month,\\@FILES);# сравниваем списки файлов с логами
return @FILES if 1;
}
Здесь важна лишь строчка -> @FILES=Compare($month,\\@FILES);
то есть в функцию передаю список файлов (ссылка на массив)
Теперь код функции Compare:
sub Compare {
my $mon=shift;
my $files=shift;# ссылка на массив @FILES
return @{$files} unless(-e "./lib/data/$mon$CONFIG{\'year\'}.txt");# возвращаем полный список - если файла нет
open(LIST,"<","./lib/data/$mon$CONFIG{\'year\'}.txt")|| GetError("Can\'t open data file $mon$CONFIG{\'year\'}: $!");
my @LIST=;
close(LIST);
### вот он уже десятый вариант кода... этот кусок самый тупой... ##########
my($i,$y);
for($i=0;$i<=scalar @{$files};$i++) {
for($y=0;$y<=scalar @LIST; $y++) {
shift @{$files} if($files->[$i] eq $LIST[$y]);
}
}
#############################
return @{$files};
}
В общем-то я пришел к самому идиотскому варианту... как видите.