I like pc88mxer's solution better than my own, but in the interest in showing different ways of doing the same thing, I'll post it anyway.
use Data::Dumper;
my $in = '0 X X X X X X X'
. ' X 1 X X X X X X'
. ' X X 2 X X X X X'
. ' X X X 3 X X X X'
. ' X X X X 4 X X X'
. ' X X X X X 5 X X'
. ' X X X X X X 6 X'
. ' X X X X X X X 7';
print Dumper [ string2matrix( $in, 8 ) ];
sub string2matrix {
my ( $string, $width ) = @_;
my @out;
while ( $string ) {
my @iter = split /\s+/, $string, $width + 1;
$string = scalar @iter > $width ? pop @iter : '';
push @out, \@iter;
}
return @out;
}