>>16
$Hoge::xをuse strict下で$xと書いたら普通は怒られるというのが問題の本質と
思われるので、use varsかourで回避するしかないんじゃない? 型グロブによる
別名づけはパッケージ変数でしか使えないし。

あるいはCPANでさがせばレキシカル変数の別名を実現するモジュールがあるので
そういうのを使うことを考えてみるとか。たとえばLexical::Aliasを使うとこん
な風に書ける。

use strict;
package Hoge;
use Lexical::Alias;

sub foo(\@) {
  my($arrayref) = @_;
  my @x;
  alias @$arrayref => @x;

  print "(foo) ";
  foreach (@x) {
    print "$_ ";
  }
  print "\n";
  push @x, ('this', 'is', 'a', 'pen', '.');
}

package main;

my @bar = ('Hello', 'World', '!');
Hoge::foo(@bar);
print "(bar) @bar\n";