push %hash, key => "value";
push %hash, @ary;
みたいに、ハッシュに対してもpush()を使えたら便利じゃないだろうか。とりあえず以下のコードで期待通りに動くはず。
use subs qw(push);
sub push (\[@%]@)
{
    my $targ = shift;
    my $type = ref $targ;

    if ($type eq 'ARRAY') {
        CORE::push @$targ, @_;

    } elsif ($type eq 'HASH') {
        while (my ($k, $v) = splice @_, 0, 2) {
            $targ->{$k} = $v;
        }
    }
}