いいじまです。

> > こんな感じでどうですか?
> >
> > $ENV{'LANG'} = "ja_JP.eucJP";
> > $a = `cal`;
> > print $a;
> >
> > サーバの環境によって、「ja_JP.eucJP」の記述が違うかもしれませんが.....
> 
> 日本語の表示が出来ました!環境変数のことはよくわからなくて
(以下略)

環境変数というのは、動作中のプログラムひとつひとつが保有しているものです。

ですから、同じシステムでも2人以上が同時に使っていればそれぞれの環境変数
の内容は異なったものになります。また、同じプログラムでも、ひとつひとつの
プログラムごとに違うものにすることができます。

たとえば、事前にふたつコンソールを立ち上げておいて、1つ目のコンソールで

$ export LANG=C
$ cal

として英語の表示が出ることを確認してから、それには手を触れずに(マウスで
ウィンドウを動かすだけならOK)、2つ目のコンソールで

$ export LANG=ja_JP.eucJP
$ cal

とすると、日本語の表示が出るはずです。そして最後に、この2つ目のコンソー
ルには手を触れずに、1つ目のコンソールに戻って、単に

$ cal

とだけしてみてください。2つ目のコンソールで LANG を日本語に設定したはず
なのに、ここでは英語の表示が出ますよね。さらにそこで

$ echo $LANG

とすると、「C」と表示されて、2つめのコンソールで LANG を変更した効果は
こちらには及んでいないことがわかります。

これを前提に種明かしをすると、コンソールからこの perl プログラムを実行し
たときには、コンソールにたどりつくまでのどこかの段階で、環境変数 LANG に
「日本語」を示す値がセットされるようになっています。たぶん、~/.bash_profile
とか、~/.profile とか、/etc/profile とか、そのあたりのファイルでしょう。

#man bash するとファイル名がいろいろ書いてあるので、それを片っ端から
#読んでみることをお勧めします。どのファイルがどの段階で読まれるのか、
#マニュアルを丁寧に読まないとわからないのが、この bash のマニュアルの
#難点なんですが…

一方、CGI として実行したときには、CGI を起動するのは httpd というプログ
ラムです。(もしかしたら、間に suexec というプログラムが介在するかもしれ
ませんが、それはここでは関係ありません)。で、CGI プログラムの環境変数は
httpd のから引き継がれるのですが、そちらの httpd の持っている環境変数一
覧では、LANG は日本語には設定されていないか、あるいは、どこかの段階で
「安全性・安定動作」を名目にして意図的に消されているか、どちらかです。

========================================================================
飯嶋 浩光 / でるもんた・いいじま   http://www.ht.sakura.ne.jp/~delmonta/
IIJIMA Hiromitsu, aka Delmonta           mailto:delmonta@ht.sakura.ne.jp

───【宣伝/ADVERTISEMENT】──────────────────────
fj.os.ms-windows.server2003 の新設に関する投票に多数のご参加をいただき、
ありがとうございました。Windows 関連のグループは今後も引き続き再編の議論
を行うことが予想されますので、引き続きご意見をいただければ幸いです。
────────────────────────────────────