Re: ありがとうございました!
いいじまです。
> > こんな感じでどうですか?
> >
> > $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 関連のグループは今後も引き続き再編の議論
を行うことが予想されますので、引き続きご意見をいただければ幸いです。
────────────────────────────────────
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735