Вы можете использовать хэш-ссылку, не отменяя ссылки на нее:
addParams(\%params);
sub addParams
{
my $params = shift;
$params->{"test"} = "testing";
}
РЕДАКТИРОВАТЬ:
Для решения проблемы вашего кода, когда вы делаете:
my(%params) = %{$_[0]};
На самом деле вы делаете копию того, на что ссылается ссылка с% {...}.Вы можете увидеть это на примере в разобранном виде (без функции, с той же функциональностью):
my %hash = ( "foo" => "foo" );
my %copy = %{ \%hash };
$hash{"bar"} = "bar";
$copy{"baz"} = "baz";
print Dumper( \%hash );
print Dumper( \%copy );
Выполнить:
$ ./test.pl
$VAR1 = {
'bar' => 'bar',
'foo' => 'foo'
};
$VAR1 = {
'baz' => 'baz',
'foo' => 'foo'
};
Оба хеша имеют исходный 'foo => foo', нотеперь у каждого есть свой бар / баз.