use strict; use warnings; use diagnostics; my $historyFile = 'gsHistToMassSto'; my $doneFlag = findTargetAttribute('last','WorkFlowStatus','status',$historyFile); print "My DONE flag = $doneFlag\n"; eval {my $result = findTargetAttribute('first','WorkFlow','status',$historyFile); print "My result is $result\n";}; sub findTargetAttribute{ use XML::Parser; my ($location,$targetElement,$targetAttribute,$file) = @_; my $parser = XML::Parser->new(Handlers => {Start => \&handle_start}); my @results; print "$location, $targetElement, $targetAttribute, $file\n"; $parser->parsefile($file); if($location eq 'first'){return $results[0]} if($location eq 'last'){return $results[-1]} else {return @results} sub handle_start { my($expat, $element, %attrs) = @_; if($element eq $targetElement){ print "Target = $targetElement\n"; if(%attrs){ while(my($key, $value) = each(%attrs)){ if($key eq $targetAttribute){push @results,$value;} } } } } }