#%executables is a hash of hashes, keyed by the executable name, and within that hash by names corresponding to the xml file - flag, version, etc. #$exName is the name of the executable being dealt with in the current loop iteration. open (PULLINFO, "$exName $executables{$exName}{'flag'} |") or die("blasted cutthroats... can't they refrain from \"$! \"-ing?"); my @versInfo = ; close PULLINFO; unless($versInfo[$executables{$exName}{"opLine"}]=~ /((?:\d+)(?:\.\d+)+)/ and $executables{$exName}{"version"}= $1) { FINDFO:foreach (@versInfo) { if(/((?:\d+)(?:\.\d+)+)/){$executables{$exName}{"version"} = $1;last FINDFO;} } }