The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
## AIX Example provided by Russel Adams
## .....    lspv -p hdisk0
## Column headers explicitly provided
use strict;
use warnings;
use feature ':5.10';

use Test::More tests => 13;
use File::Spec;
use DataExtract::FixedWidth;

my $file = File::Spec->catfile( 't', 'data', 'RusselAdams-Snap.txt' );
open ( my $fh, $file ) || die "Can not open $file";

my $fw;
while ( my $line = <$fh> ) {

	if ( $. == 1 ) {
		$fw = DataExtract::FixedWidth->new({
			header_row => $line
			, cols     => [
				qw/STATE REGION TYPE/
				, 'PP RANGE'
				, 'MOUNT POINT'
				, 'LV NAME'
			]
		});
		ok ( $fw->unpack_string eq 'a10a8a14a20a11A*'
			, 'Testing hard coded prerendered unpack string'
				. ' Expected a10a8a14a20a11A'
				. ' got ' . $fw->unpack_string
		);
	}
	else {
		my $arrRef = $fw->parse( $line );
		my $hashRef = $fw->parse_hash( $line );

		given ( $. ) {
			when ( 2 ) {
				ok ( $hashRef->{'PP RANGE'} eq '1-1', "Testing output (->parse_hash)" );
				ok ( $hashRef->{'REGION'} eq 'outer edge', "Testing output (->parse_hash)" );
				ok ( $hashRef->{'MOUNT POINT'} eq 'N/A', "Testing output (->parse_hash)" );
				
				ok ( $arrRef->[0] eq '1-1', "Testing output (->parse)" );
				ok ( $arrRef->[2] eq 'outer edge', "Testing output (->parse)" );
				ok ( $arrRef->[5] eq 'N/A', "Testing output (->parse)" );
			};
			when ( 8 ) {
				ok ( $hashRef->{'PP RANGE'} eq '205-217', "Testing output (->parse_hash)" );
				ok ( $hashRef->{'REGION'} eq 'outer middle', "Testing output (->parse_hash)" );
				ok ( $hashRef->{'MOUNT POINT'} eq '', "Testing output (->parse_hash)" );
				
				ok ( $arrRef->[0] eq '205-217', "Testing output (->parse)" );
				ok ( $arrRef->[2] eq 'outer middle', "Testing output (->parse)" );
				ok ( $arrRef->[5] eq '', "Testing output (->parse)" );
			};
		};

	}

}