Я думаю, что ваша проблема в том, что вы вызываете print
для своей подпрограммы, а print уже определен в perl.
Попробуйте изменить имя подпрограммы, например, это работает для меня:
my %file_attachments = (
'test1.zip' => { 'price' => '10.00', 'desc' => 'the 1st test'},
'test2.zip' => { 'price' => '12.00', 'desc' => 'the 2nd test'},
'test3.zip' => { 'price' => '13.00', 'desc' => 'the 3rd test'},
'test4.zip' => { 'price' => '14.00', 'desc' => 'the 4th test'}
);
my $a="test5.zip";
my $b="the 5th test";
$file_attachments{$a}->{'price'} = '18.00';
$file_attachments{$a}->{'desc'} =$b;
printtest(%file_attachments);
sub printtest{
my %file =@_;
foreach my $line (keys %file) {
print "$line: \n";
foreach my $elem (keys %{$file{$line}}) {
print " $elem: " . $file{$line}->{$elem} . "\n";
}
}
}