#! perl -slw use strict; use Data::Dumper; my %hash = map{ my( $free, $name, $size ) = m[ ^ (?= .* FreeSpace \s+ = \s+ " ( [^"]+ ) "; ) #" (?= .* Name \s+ = \s+ " ( [^"]+ ) "; ) #" (?= .* Size \s+ = \s+ " ( [^"]+ ) "; ) #" ]smx or warn "Bad record '$_'"; $name ? ( $name => { freespace => $free, size => $size } ) : (); } do{ local $/ = "\n};\n"; }; print Dumper \%hash; __DATA__