Переменная Perl = NA, если она равна чему-то конкретному - PullRequest
0 голосов
/ 21 июня 2019

У меня есть скрипт, в котором я заполняю имена переменных из XML-документа. В этом документе у моего антивируса есть поле «Время последнего обнаружения», в этом поле указывается значение по умолчанию, если обнаружение никогда не было.

Вроде так;

LastVirusDetectionTime <1970-01-01T00: 00: 00 + 11: 00>

Моя функция выглядит так:

my @NAMES = ("Name", "VirusDefinitions", "IPAddress", "OperatingSystem", "AgentVersion", "Infected", "LastScanTime","LastUpdateTime","WorstInfectionIDX","LastVirusTime","Threats","StartDateTime","StopDateTime","TotalFiles","Duration","AutoProtectEnabled" );

open( FIL, "< $FILEA" )|| die "cant open file $!" ;
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 "WorstInfectionIDX") {
        $winfid=$TMP;
        }elsif ($N eq "LastVirusTime") {
        $lastvirust=$TMP;
        }elsif ($N eq "Threats"){
        $threats=$TMP;
        }elsif ($N eq "StartDateTime"){
        $starttime=$TMP;
        }elsif ($N eq "StopDateTime"){
        $stoptime=$TMP;
        }elsif ($N eq "TotalFiles"){
        $totalfil=$TMP;
        }elsif ($N eq "Duration"){
        $scandur=$TMP;
        }elsif ($N eq "AutoProtectEnabled") {
        $autoprot=$TMP;
        $CUST =~ s/\W//g; #We shave special characters off of the $CUST variable and return normal characters
        print LOG "$today $time, <LastUpdateTime><$LASTUP><ProjectNr><$PROJNO><Site><$CUST><Device><$NAME><ThreatsFound><$threats><Definition><$VIRUSDEF><IpAddress><$IP><OS><$OS><AgentVersion><$AGNT><Infected><$INFEC><WorstInfectionID><$winfid><LastVirusDetectionTime><$lastvirust><ScanStartTime><$starttime><ScanStopTime><$stoptime><ScanDuration><$scandur><LastScan><$LAST><AutoProtectionEnabled><$autoprot><FilesScanned><$totalfil><FileName><$FILE1>\n" ;
        #init variables again
        init
        }

Могу ли я как-нибудь проверить переменную $ lastvirust, чтобы увидеть, содержит ли она 1970 и просто ли вместо нее выводить «NA»?

Или, что еще лучше, сделайте так, чтобы он проверял, является ли год в переменной 2010 или старше, и просто выведите «NA» вместо тега 1970-01-01T00: 00: 00 + 11.00.

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