shun さん、
それはサーバの設定ではなく、CGIの中でのパスの設定が間違っているのでしょう。
その CGI と data.txt のローカル絶対パスはそれぞれどうなっていますか?
WWWサーバを立ち上げ、カレントディレクトリのCGIでopen演算子を使って、
sub error ($);1階層下のディレクトリにあるデータファイルdata.txtを
$data_file = 'data/data.txt';
open(FILE, "$data_file") or error $!;
…途中省略…
sub error ($) {
my $emsg = shift;
print "$emsg\n";
exit;
}