これはうごくっしょ。
use strict;
use warnings;

my %arg = (a => 1, b => 2, c => 3);

{
no strict 'refs';
map { ${ $_ } = $arg{ $_ } } qw(a b c);
}
{
no strict 'vars';
no warnings 'once';
print "$a, $b, $c\n";
}

掟破りなコードだわな。
普通は使わないので、プログラムを練り直してください。