#!/usr/bin/perl use strict; use warnings; use Data::Dumper qw(Dumper); { my $data = do { local $/; }; $data =~ s/^ Shapes \s+? \{ (.*) \} \s+ $/$1/sx; my @chunks; push @chunks, [ $1, $2, $3 ] while $data =~ / Shape=Circle \s+ \{ \s+ name=(\w+) \s+ diameter=(\d+) \s+ color=(\w+) \s+ \} /gsx; print Dumper \@chunks; } __DATA__ Shapes { Shape=Circle { name=joe diameter=3 color=blue } Shape=Circle { name=steve diameter=5 color=red } } #### $VAR1 = [ [ 'joe', '3', 'blue' ], [ 'steve', '5', 'red' ] ];