in reply to Converting a hash element into an array

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' ] };