I am doing a nested while loop with filehandlers and getting massive redundancies. Can anyone help me with this?

ActiveStatePerl 5.10.0 Build 1004 (free version)
Coding on WXP using VIM for Windows (unfortunately)

I have a file that contains a list of files and md5hashes.

This is the first while loop using a file handler. A real file will have 200 lines or so.
(sample file list BADFILES.csv)
let.exe,FFA9C229DE8F66776EFCBA90086877F7,C:\,18944KB,ticket

Im connected to hosts and doing a filescan and for this test the host has the file located in three directories. I was unable to regex this as a variable it would only grab the first c:\ due to the format. So I dumped it to FSOUT.txt and created a second while loop doing a filehandler. This works perfect and grabs all three but created redundancies.
(sample output FSOUT.txt)

Attempting to connect to remote host... Initialising rctrlx server component... Executing remote application: filescan.exe let.exe Stdout: Volume in drive C has no label. Volume Serial Number is 6C3D-BD57 Directory of c:\ 02/04/2009 11:26 AM 0 let.exe 1 File(s) 0 bytes Directory of c:\WINDOWS 02/04/2009 11:31 AM 0 let.exe 1 File(s) 0 bytes Directory of c:\WINDOWS\system32 02/04/2009 11:31 AM 0 let.exe 1 File(s) 0 bytes Total Files Listed: 3 File(s) 0 bytes 0 Dir(s) 27,333,230,592 bytes free Remote application exited with code: 0
Here is the snippet of code with the nested while loops. #!C:\\Perl\\bin\\perl.exe

my $workdir = "c:\\MalwareScanner\\lclscn"; if (! $ARGV[0]){ print "FATAL Didnt get an IP address\n"; $target = <>; } else { $target = $ARGV[0]; } $badfiles = "$workdir\\BADFILES.csv"; $fsout = "$workdir\\FSOUT.txt"; open (BADIN,$badfiles); open (FSOUT,">$fsout"); print HOSTINFO "File,MD5,Ticket,Size,Path\n"; while (<BADIN>){ chomp(); $badline = $_; if ($badline =~ /(.+?),(.+?),.+?,.+?,(.+)/){ $file = $1; $hash = $2; $tckt = $3; } $filescan = `rctrlx.exe $target /u "domain\\username" /p "password +" /c filescan.exe /app filescan.exe $file`; print FSOUT $filescan; if ($filescan =~ /(error.*)/i){ $scanerror1 = $1; print ERROR "$logdate,$logtime,$target,$host,Could not run fil +escan.exe remotely on target host,$scanerror1\n"; } if ($filescan =~ /(.*\d{10})/){ $scanerror2 = $1; print ERROR "$logdate,$logtime,$target,$host,Could not run fil +escan.exe remotely on target host,$scanerror2\n"; } close FSOUT; $fsin = "$workdir\\FSOUT.txt"; open (FSIN,$fsin); while (<FSIN>){ chomp(); $fsline = $_; if ($fsline =~ /(.:\\.*)/){ $dir = $1; print "XXXX$dir\n"; } if ($fsline =~ /1\sFile\(s\)\s+(.*)/){ $size = $1; $size =~ s/[\s]//g; $scanned = "$logdir\\SCANNED.csv"; open (SCANNED,">>$scanned"); print SCANNED "$logdate,$logtime,$target,$host\n"; } print "$dir\n"; $badhost = "$logdir\\BADHOST.csv"; open (BADHOST,">>$badhost"); $dest = "$dir\\$file"; $dest =~ s/[\s]//g; $md5sumtmp = `rctrlx.exe $target /u "domain\\username" /p "pas +sword" /c md5sum.exe /app md5sum.exe $dest`; if ($md5sumtmp =~ /([a-z0-9]{32})/){ $md5sum = $1; } if ($md5sum eq $hash){ print HOSTINFO "$file,$md5sum,$tckt,$size,$dir\n"; print BADHOST "$logdate,$logtime,$target,$host,$file,$md5s +um,$tckt,$size,$dir\n"; } } }
Notice I have two print to STDOUT for testing:
[print "XXXX$dir\n";] [print "$dir\n";]
This is what I get when I run it against the host with the files.

\n \n \n \n \n \n \n \n \n \n \n XXXXc:\ c:\ c:\ c:\ c:\ c:\ XXXXc:\WINDOWS c:\WINDOWS c:\WINDOWS c:\WINDOWS c:\WINDOWS c:\WINDOWS XXXXc:\WINDOWS\system32 c:\WINDOWS\system32 c:\WINDOWS\system32 c:\WINDOWS\system32 c:\WINDOWS\system32 c:\WINDOWS\system32 c:\WINDOWS\system32 c:\WINDOWS\system32 c:\WINDOWS\system32 c:\WINDOWS\system32 c:\WINDOWS\system32
What I need is just the three directory listings c:\ , c:\WINDOWS , c:\WINDOWS\system32.

In reply to Nested While Loop Problem by Smith

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.