>>329
突っ込みどころが恐ろしいくらいに沢山あるけど、とりあえず直接的な原因はPerl以前の話だ。
> $files[$i].txt
.txtは余計だろうがゴルァ

しかし、foreachを知ってるらしいのに、何でわざわざdo-while文で$iを
インクリメントして頑張っているのやら…。もしかして、変数に入れる方法を知らない?
foreach my $scalar (@array) { $scalarをここで使う }
で、$scalarにそれぞれの要素が入る。これを省略すると$_に入る。
myは今の段階では、その{ }の中でだけ$scalarを使うと言う宣言だと思っておけば良いと思う。

以下、漏れが書くとこうなる。ご参考までに。
chdir "c:/program files/test";
my @files = glob "*.txt";

foreach my $file (@files) { print $file, "\n" }
foreach my $file (@files) {
  open my $fh, '<', $file
    or die "Can't open $file: $!\n"; # 開き損ねたらエラーメッセージを吐いて死ぬ
  
  print <$fh>; # そのまま出力するだけなら変数に入れるまでもあるまい
  # open my $fh, (ryで開いておくとスコープアウトすれば閉じられる
}