Спасибо большое за ответы, однако у меня все еще есть проблемы с получением скрипта для компиляции.
Когда я использую пример, который вы написали, Дэйв, я получаю ошибку.Я предполагаю, что это связано с версиями, может быть?Скрипт в Perl 5.6, насколько я могу судить
Не удается найти файл feature.pm в @INC (@INC содержит: C: /perl/perl-5.6.0-win/libC: /perl/perl-5.6.0-win/site/lib.)
То же самое касается "use Time :: Piece;
Canне найти Time / Piece.pm в @ INC
И я не могу заставить мой $ filename = strftime работать.
ЕслиЯ следую примеру Абигейл. Я получаю
Не могу вызвать метод "say" без ссылки на пакет или объект в строке 63 dirlist.pl.
Мне это кажетсякак пример, ближайший к работе.
Затем я попытался с помощью «Открыть» и получил
Не могу использовать строку ("20190426-report.txt") в качестве символа ref, в то время как"строгие ссылки" используются в строке 62 dirlist.pl.
Я извиняюсь, если что-то из этого является базовым Perl, пытаюсь разобраться. Я знаю о неиспользуемых переменных и закомментированных функциях(это я пытаюсь собрать вещи воедино), но мой первый приорНужно заставить скрипт работать так, как задумано, тогда я сделаю некоторую очистку.
Это скрипт
#!/usr/bin/perl
use strict;
use warnings;
use POSIX;
use File::stat;
use File::Basename;
use File::Find;
use File::Copy;
use POSIX qw(strftime);
#To look for more in the virus, add name to array and increase the switch elsif
my @NAMES = ("Name", "VirusDefinitions", "IPAddress", "OperatingSystem", "AgentVersion", "Infected", "LastScanTime","LastUpdateTime" );
my $DEBUG = 2; # debug on = 1 low, = 2 detailed, = 3 full, = 0 OFF. Will print to screen needed in file the pipe >filename
my $DETAILED = 0; #
#vars
my $path = $ARGV[0];
my $TXT = $ARGV[1];
my $DIR2 = "XX"; #This returns the main dir
my $DIR3 = "XX";
my $PROJNO = "XX";
my $FILE1 = "XX"; #This returns the filename
my $CUST = "XX";
my $FILEA="$DIR3\\$FILE1"; #This returns the complete filepath "x:\\folder\\file.txt"
my $NAME="XX";
my $VIRUSDEF="XX"
;my $IP="XX";
my $OS="XX";
my $AGNT="XX";
my $INFEC="XX";
my $LAST="XX";
my $DATE = strftime "%d/%m/%Y", localtime; #Store local (server) time in the $DATE variable
my $LASTUP ="XX";
my $entr = "XX";
my $logname = "report.txt";
my ($day, $month, $year) = (localtime) [3, 4, 5];
my $file_name = sprintf "%04d%02d%02d-report.txt" =>
$year + 1900, $month +1, $day;
#make current date time below and 2 digit
my ($sec,$min,$hour,$mday,$mon,$wday,$yday,$isdst) = localtime();
$mon +=1;
my $DATO = sprintf("%02d%02d%02d", $year, $mon, $mday);
# reinitialiser report vars to make sure we can see if we miss one
sub init {
my $NAME="XX";
my $VIRUSDEF="XX";
my $IP="XX";
my $OS="XX";
my $AGNT="XX";
my $INFEC="XX";
my $LAST="XX";
my $LASTUP="XX";
}
#save fixed details
#open (LOG, '> Report.txt'); #Overrite report.txt
#open (LOG, '>> Report.txt'); #Append to report.txt
#print LOG "Project, Customer-Site, LastUpdateTime, Server-Name, Definition-File, IP-address , Operating-Sys, Agent-Version, Infected, Last-Scan-Time, AntiVirus-file\n" ; #Commented out as we're already defining the values.
#open my $log_fh, '>>', "$today-report.txt"
# or die "Cannot open $today-report.txt: $!";
open $file_name;
sub report {
$FILEA="$DIR3\\$FILE1";
if ($DEBUG){print "report: $PROJNO\n";}
if ($DEBUG){print "report: $CUST\n";}
if ($DEBUG){print "report: $FILE1\n";}
if ($DEBUG){print "report: $FILEA\n";}
if ($DEBUG){print "report: $LASTUP\n";}
open( FIL, "< $FILEA" )|| die "cant open file $!" ; #This is the filehandler
while (defined ($_ = <FIL>)) {
foreach my $N (@NAMES) {
#print "looking for $N\n" ;
if ($_ =~ /$N/) {
if ($DEBUG gt 2){print "report: Looking for $N\n";}
$_ =~ /$N(.*)$N/;
my $TMP = $1;
$TMP =~ s/[\$#@~!&*()<>\[\];,?^ `\\\/]+//g;
#Switch that has to be extended if the array NAMES is extended
if ($N eq "Name") {
$NAME=$TMP;
}elsif ($N eq "VirusDefinitions"){
$VIRUSDEF=$TMP;
}elsif ($N eq "IPAddress") {
$IP=$TMP;
}elsif ($N eq "OperatingSystem") {
$OS=$TMP;
}elsif ($N eq "AgentVersion") {
$AGNT=$TMP;
}elsif ($N eq "Infected") {
$INFEC=$TMP;
}elsif ($N eq "LastScanTime") {
$LAST=$TMP;}
elsif ($N eq "LastUpdateTime") {
$LASTUP=$TMP;
}
#}elsif ($N eq "Date") {
#$DATE=strftime;
print LOG "date: $DATE, Last Update Time: $LASTUP, pnr: $PROJNO, site: $CUST, serv: $NAME, def: $VIRUSDEF, ipadr: $IP, os: $OS, agntver: $AGNT, inf: $INFEC, lscan: $LAST, file: $FILE1\n" ;
#init variables again
init
}
else{
#print "no match $N\n"
}
}
#close myfile ;
}
if ($DEBUG){print "report: copy $PROJNO.$FILE1 to Avold\n";}
copy ( "$FILEA", "c:\\Avold\\$PROJNO.$FILE1") ;
if ($DEBUG){print "options to script : $path AND $TXT : DATE was : $DATO \n ";}
#if argv txt make a copy of the xml as txt file customer_attachments.
if ( $TXT eq "txt" ){
#chop($CUST);
if ($DEBUG){print "inside if options to script : $path AND $TXT DATO =$DATO \n";}
copy ( "$FILEA", "c:\\AVDownload\\_Customer_attachments\\$PROJNO-$DATO-AntiVirusReport-$CUST.txt") ;
}
#Close filehandler/file so that we can unlink/delete the file
close FIL ;
#remove the files if a copy exists
if ( -e "c:\\Avold\\$PROJNO.$FILE1")
{
unlink glob "c:\\AVDownload\\$entr\\*.xml";
print "$path $entr\n";
print "file : $PROJNO.$FILE1: DIR2=$DIR2 and DIR3=$DIR3\n";
}else{
print "file is not there";
}
} #end report
# unless -d $path;
#main
opendir( my $DIR, $path );
while ( my $entry = readdir $DIR ) {
next unless -d $path . '/' . $entry;
next if $entry eq '.' or $entry eq '..';
$DIR2 = $path . $entry . '\\' ;
$DIR3 = $path . $entry ; #\$entry";
$entr=$entry ;
my @names = split /_/, $DIR2, 2 ;
$PROJNO = $names[0];
$PROJNO =~ s/\D//g ;
$CUST = $names[1];
chop($CUST);
if ($DEBUG gt 1){print "main: $PROJNO and $CUST\n";}
if ($DEBUG gt 1){print "main: $DIR2\n";}
opendir my $dh, $DIR2 or die "Error opening $DIR2: $!";
#my @files = grep(/AntiVirus.zip$/,readdir($dh));
my @files = grep(/AntiVirus.xml$/,readdir($dh));
if (!@files) {
#print "$files[$#files]\n";
if ($DEBUG gt 1){print "main: array was empty = no .zip files found\n";}
if ($DEBUG gt 1){print "main: No antivirus zip files found\n";}
print LOG "$PROJNO, $CUST\n" ;
#report
}else{
if ($DEBUG gt 1){print "main: One or more Antivirus files found, we'll take the newest\n";}
#print "$files[$#files]\n";
$FILE1=$files[$#files];
#call report
report
}
closedir $dh;
}
closedir $DIR;
close LOG ;