[test] の部分が、文字リストとして解釈されるからじゃないか。

  $dir =~ s/\[/\\[/;
  $dir =~ s/\]/\\]/;

  print join(', ', glob("$dir/*")) . "\n";

みたいにエスケープしてやれば大丈夫なんだけど、スマートな方法は
思い付かないな。glob_escape() とかあればいいんだが…。