e日記風 独り言

英国のEU離脱やトランプ米新大統領など、世界は今までの経験則では予想不可能な変化を見せ始めた。今年はそのトランプ新大統領が最大国家米国の実際の政治を執り行う最初の年。吉と出るか凶と出るか? 株価だけでなく心配や期待が乱高下しそうな年の幕開けだ。
Access Counter:  総アクセス数

楽 天 の 商 品

-2105- 年末・・・じゃなくて
= 今日は画像なし m(_ _)m =
2019年・令和元年も今日でお終い。・・・と言いつつ令和はもちろん、キリスト生誕を起点にするグレゴリオ暦にも何の意味も見出せない & 1月元旦でさえも冷めた目でしか見ていない私は、世の中の年越し狂騒を覚めた目で見つつ、家族とはそれなりに「晦日~正月」を<祝って>いる。
・・・と言う話はさておき、相変わらず「締め」の話題も狭い話(恐縮)。私は年末・年始を過ごすため今年は 4日ほど前から娘の婚家の隣の家に来ているが、最初のうちこちらに来るときは自前の PCを担いで来ていたが、軽いとはいえ PCを担いでの長い移動は老体には些かキツイので、最近はこちらに大昔家人用に買った Note PCを置きっぱなしにしてある。但し、この PCはもうとっくにサポート期限切れの Windows Xpマシン。
その PCでも、こっちにいる僅かの空き時間に perlのスクリプトを確認しようとローカルマシンのサーバー用に XAMPPをインストールしてある。今までこの XAMPP/Apache上の perlで cgiスクリプトをテストしていた。しかし、最近になって一部の動作で問題があることに気づいた。それは perlスクリプト(親)の中で別の perlスクリプト(子)を実行する場合だ。同じ親/子スクリプトは神奈川の自宅 PCでは問題ないことを確認してある。実際の親スクリプト中の perlの子スクリプト起動行は以下の通り。
my $ret = `perl child01.cgi $art1 $art2`;
第一引数が子スクリプト名、第2引数($art1)以降がその子スクリプトに渡す引数、正常動作すれば子スクリプトの中の print文 を実行すると戻り値が $ret に入る。それが、こちらの PCの xampp上で実行すると、引数に指定した変数が子スクリプト中で/子スクリプトの戻り値が親スクリプトで受け取れない。
my $str1 = $ARGV[0];
子スクリプトの中で上記の式を実行すれば引数が受け取れるはずが、ブラウザではエラーが、Apacheの error.logには
Use of uninitialized value $str1 in concatenation (.) or string at D:/HTML/test/child01.cgi line 13.\r
のようなエラーが記録されて、引数が受け取れない。(因みに子スクリプトを呼ばなければエラーは起きない)
perlの再インストールなど試したが効果ナシ。こちらに来た時は PCに向かう時間が取れないので通算 1週間以上悩んだが、ふとコマンドラインから子スクリプトを実行したらどうなるだろうと思って Apacheの Shellを起動して perl D:/HTML/test/child01.cgi 022 abcd とタイプしてみた。すると「perlは、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません」エラーが出てしまった。ここに至ってやっと、「えっ!? perlのパスが通っていない??」と思って、Windowsの環境変数の path を調べると perl関係は何故か C:\xampp\perl\c\bin;C:\xampp\perl\perl\site \bin;C:\xampp\perl\perl\bin; となっていて、C:\xampp\perl\bin; とか C:\usr\bin は通っていない。そこで C:\usr\bin を追加してから Windowsを再起動して 念のために再度 Shellから perl D:/HTML/test/child01.cgi 022 abcd を実行すると、今度はちゃんと print文の結果が表示された。そこで ブラウザから 親スクリプトの URLを指定すると、今度はちゃんと子スクリプトの print文の戻り値が $refに入った。
何のことはない、perl のパスが通っていないので、Apacheから実行される親スクリプトは Shebang行の perlを実行するが、子スクリプトのほうは Windowsの pathが通っていないとダメということらしい。ただ未だに不思議なのは、Use of uninitialized value が出ると言うことは子スクリプト自身は実行されているわけで、path が通っていないと子スクリプトでは引数が受け取れない、親スクリプトでは戻り値が受け取れないだけと言うことらしい。
疑問は残るが、取り敢えずギリギリ年内に問題はクリアー出来た。メデタシ
2019/12/31