In case you want to start using an array for the entry as soon as there is more than one element (and only then), you could do
... my $key = <STDIN>; chomp($key); my $val = <STDIN>; chomp($val); if (exists $hash{$key}) { $hash{$key} = [ $hash{$key} ] unless ref($hash{$key}); push @{$hash{$key}}, $val; } else { $hash{$key} = $val; }
Update: this would produce a data structure like this
$VAR1 = { 'bar' => 'val3', 'baz' => 'val4', 'foo' => [ 'val1', 'val2' ] };
Whether that's convenient to use further on, is another question... Maybe you'd want to always use an array for each entry, in which case you could simply write (using autovivification):
... my $key = <STDIN>; chomp($key); my $val = <STDIN>; chomp($val); push @{$hash{$key}}, $val;
producing:
$VAR1 = { 'bar' => [ 'val3' ], 'baz' => [ 'val4' ], 'foo' => [ 'val1', 'val2' ] };
In reply to Re: Converting a hash element into an array
by almut
in thread Converting a hash element into an array
by rockers
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |