How about just parsing the whole thing, and afterward using those fields you're interested in, and simply ignore the rest?
use strict;
use warnings;
use 5.010;
my %states;
while (<DATA>) {
chomp;
if (/^ ([^:]+) : \s+ (.*)/x) {
$states{$1} = $2;
}
}
use Data::Dumper;
print Dumper \%states;
__DATA__
Controller Status: Optimal
NCQ status: Enabled
Status of logical device: Optimal
Power State: RPM
Supported Power State: RPM, Powered off
Prints
$VAR1 = {
'Supported Power State' => 'RPM, Powered off',
'Power State' => 'RPM',
'NCQ status' => 'Enabled',
'Status of logical device' => 'Optimal',
'Controller Status' => 'Optimal'
};
So all the interesting (and some of the uninteresting) data is in %states.