$ perl -MData::Dumper -E '
> $text = <<EOT;
> a 2 b 4,5,6 c d e 45,657,-67
> f g 23,54 h 5 i j
> 286,71,90 k 7 l 72
> m 26,8 n
> EOT
> %hash =
> map { $_->[ 0 ] => [ split m{,}, $_->[ 1 ] ] }
> sub {
> push @arr, [ $1, $2 ]
> while $_[ 0 ] =~ m{\s*([a-z])\s+([-,\d]*)}g;
> return @arr;
> }->( $text );
> say Data::Dumper->Dumpxs( [ \ %hash ], [ qw{ *hash } ] );'
%hash = (
'e' => [
'45',
'657',
'-67'
],
'n' => [],
'a' => [
'2'
],
'm' => [
'26',
'8'
],
'd' => [],
'j' => [
'286',
'71',
'90'
],
'l' => [
'72'
],
'c' => [],
'k' => [
'7'
],
'h' => [
'5'
],
'b' => [
'4',
'5',
'6'
],
'g' => [
'23',
'54'
],
'f' => [],
'i' => []
);
$
If your data is in a file then slurp the whole of the file into a scalar. Something like (using strictures and warnings):-
my $dataFile = q{/path/to/myDataFile};
my $text = do {
open my $dataFH, q{<}, $dataFile
or die qq{open: < $dataFile: $!\n};
local $/;
<$dataFH>;
};
I hope this answers your question.
|