Here's one way. It's not very elegant but I, too, have trouble with RegEx's. I think this does what you want; but I'm sure there's a shorter or more compact way. But hopefully it's a start. Note that I put sigle quotes around the output of $value to show that white space has, indeed, been trimmed off.
#!/usr/bin/perl
use strict;
use warnings;
my @out = (
'HostName: LAP3220889
TaskName: infiniteloop
Next Run Time: Never
Status:
Last Run Time: 21:45:18, 22/06/2011
Last Result: 0
'
,
'HostName: LAP3220889
TaskName: infiniteloop
Next Run Time: 11:06:00, 23/06/2011
Status: Running
Last Run Time: 10:10:04, 23/06/2011
Last Result: 0
'
,);
my($key,$value)=('',0);
foreach my $recNo(0..(scalar(@out)-1)){
print "\nRecord No. $recNo\n";
my @lines = split("\n",$out[$recNo]);
foreach my $line (@lines){
next unless(($key) = ($line =~ /^(HostName|Status|Last\sResult)/)
+);
$value = '';
($value) = ($line =~ /:(.*)$/);
$value =~ s/^\s*(\S*)\s*$/$1/; #strip off leading and trailing w
+hite space
print " $key = '$value'\n";
}
}
exit(0);
The output from this code is:
Record No. 0
HostName = 'LAP3220889'
Status = ''
Last Result = '0'
Record No. 1
HostName = 'LAP3220889'
Status = 'Running'
Last Result = '0'