Мне нужно посмотреть несколько файлов в Perl, и я использую Linux :: Inotify2 .Однако я сталкиваюсь с проблемой, заключающейся в том, что первый просматриваемый файл необходимо изменить и нажать, затем второй, затем первый и т. Д. И т. Д.
Например, если второй файл изменяется перед первым, он не будетсработать, или если первый запускается два раза подряд, а второй не запускается между ними.
Этот раздел кода, который я использую, имеет эту проблему.
my $inotify = new Linux::Inotify2;
my $inotify2 = new Linux::Inotify2;
$inotify->watch ("/tmp/rules.txt", IN_MODIFY);
$inotify2->watch ("/tmp/csvrules.out", IN_MODIFY);
while () {
my @events = $inotify->read;
unless (@events > 0){
print "read error: $!";
last ;
}
foreach $mask (@events) {
printf "mask\t%d\n", $mask;
open (WWWRULES, "/tmp/rules.txt");
my @lines = <WWWRULES>;
foreach $line (@lines) {
@things = split(/,/, $line);
addrule(@things[0], @things[1], @things[2], @things[3], trim(@things[4]));
print "PRINTING: @things[0], @things[1], @things[2], @things[3], @things[4]";
close (WWWRULES);
open (WWWRULES, ">/tmp/rules.txt");
close (WWWRULES);
}
}
my @events2 = $inotify2->read;
unless (@events2 > 0){
print "read error: $!";
last ;
}
foreach $mask (@events) {
printf "mask\t%d\n", $mask;
open (SNORTRULES, "/tmp/csvrules.out");
my @lines2 = <SNORTRULES>;
foreach $line2 (@lines2) {
@things2 = split(/,/, $line2);
addrule("INPUT", @things2[0], @things2[1], @things2[2], trim(@things2[3]));
print "PRINTING: INPUT, @things2[0], @things2[1], @things2[2], @things2[3]";
close (SNORTRULES);
open (SNORTRULES, ">/tmp/csvrules.out");
close (SNORTRULES);
}
}
}
В идеале я хотел бы посмотреть 3 файла, но поскольку я не могу заставить их работать 2, на данном этапе это кажется немного бессмысленным.
Спасибо за любую помощь!