in reply to Fail to update an array in HoAoA
There are multiple logical design errors in the flow of your program. One of them is that you assign an arrayref to $hoa{$key} while you want it to be an arrayref itself, so you have to push your data in that array like push @{hoa{$key}}, [ @aoa ]. This assignment is also misplaced, as it will push an empty arrayref in case the line from <DATA> doesn't match any of the pattern you mentionned (/^\s+/ won't match an empty line by the way, /^$/ will).
Here's some code that will produce what you want. You may look at that solution (among others, as always) directly, or try and correct your code a bit by yourself first.
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $key; my %hoa; while ( <DATA> ) { chomp; next if (/^$/); if ( /^SET/ ) { $key = (split)[1]; # perldoc -f split } elsif (/^\d/) { push @{$hoa{$key}}, [ split /,/ ]; # perldoc -f split } } print Dumper \%hoa ; __DATA__ SET: SET1 0,100,BOOK 1,150,PENCIL ==== SET: SET2 2,110,ERASER 2,200,PEN 0,220,BLACKBOARD 1,300,CHALK ====
Update: updated explanations a bit, small updates to the code.
|
|---|