Perl コーディング初心者質問コーナー Part37

このエントリーをはてなブックマークに追加
895nobodyさん:04/10/05 12:05:45 ID:???
XP proマシンにIISとActive Perl入れて動作検証してますが、
次のようなエラーになってしまいます。
'c:\inetpub\wwwroot\cgi-bin\apply.cgi' script produced no output

webサーバーでは正常に動いているのですが、IISでディレクトリの設定を
変える必要があるのでしょうか?
IIS開いてみたけどよく分かりませんでした。
どこを変えればよいでしょうか。
※テキストファイルを書き出すプログラムを書いています。

よろしくお願いします。
896nobodyさん:04/10/05 12:20:39 ID:???
script produced no output でググればあるじゃん
897nobodyさん:04/10/05 13:37:28 ID:???
ロジックに関する質問いいでしょうか。
例えばこのようなフォルダ構造がある場合、
index.cgiが全ディレクトリ内のファイルの一覧を取得する事は可能でしょうか。

[root]
├ index.cgi
├ [data]
│  ├ [data_bak]
│  │   └ log.log
│  ├ data.log
│  └ data2.log
├ [file]
│  ├ file.txt
│  └ file2.txt
└ [img]
    ├ img.gif
    └ img2.gif

index.cgiでreaddirで一覧を取得し、その中にディレクトリがあれば、その中の一覧も取得し、
さらにその中にディレクトリがあれば・・・といった形の構造にしたいのです。
898nobodyさん:04/10/05 13:42:52 ID:???
>897
どうしたの?
899nobodyさん:04/10/05 13:43:53 ID:???
>>897
「ディレクトリ+再帰+PHP」でググれ

あとはディレクトリのパーミッションに気をつけること
900nobodyさん:04/10/05 14:15:07 ID:???
>>897
>可能でしょうか。
可能でしょう。
>・・・といった形の構造にしたいのです。
そういった構造で、可能でしょう。

プログラムとは、といった構造だと出来るのではないか、可能ではないか、
と考えて作り、動かしてみて、思った通りに行かなければ、
なぜそう行かないのかを探り、修正し、、、、
といった積み重ねで出来上がるものなのです。
901nobodyさん:04/10/05 14:31:18 ID:???
>>900
0から聞かれるよりかは、可能か不可能かだけを聞いてやり方を各自で模索してくれる方がありがたいのだが・・・w
902nobodyさん:04/10/05 14:37:12 ID:???
>>901
だから、実際書いて見てつまずいた所を
聞いてこなきゃ進まないわな。

可能ですか?…といった構造にしたいのです。
なら「可能です」で終わるよ。

たぶんこれ期待した答えじゃないよな。
といって具体的な質問でもないとすると、
そこまで考えてて、一から教えろって話?
903nobodyさん:04/10/05 14:43:17 ID:???
質問方法なんて質問者次第だからどーでもよくねぇ?
904nobodyさん:04/10/05 14:50:30 ID:???
>>1
905nobodyさん:04/10/05 14:54:11 ID:???
みんなログ保存はタブで分けてる?それとも<>で分けてる
一番いいのってなんだろ
906nobodyさん:04/10/05 14:57:47 ID:???
何のログだYO
その辺のヘボいBBSの名前欄とかにタブ文字入れるとログが壊れて面白いなw
907nobodyさん:04/10/05 15:01:03 ID:???
>>906
掲示板とかの

タブというかログ分けのコードを消去してない奴なんているのか
908nobodyさん:04/10/05 15:04:51 ID:???
俺は<>かな。理由は2chがそうだからってだけ。
909nobodyさん:04/10/05 15:09:13 ID:???
俺はオブジェクトのまんまdump
910897:04/10/05 15:56:46 ID:???
成功しました。
サブルーチンの中でサブルーチンを呼んで、、、という方法だったのですね。
ヒントを下さった>>899氏、ありがとうございます。
911nobodyさん:04/10/05 16:53:35 ID:eG43Pgsa

BEGIN{
if ( $ENV{'REMOTE_ADDR'} eq '127.0.0.1' ) {
push @INC, 'C:\Program Files\Apache Group\Apache\htdocs\public_html\cgi-bin';
}else{
push @INC, '/home/public_html/cgi-bin';
}
}

サーバでもローカルでも問題なく動かせるようにするために、自作のモジュールの場所を
上記のようにやってみた。しかしローカルでエラーが出た。多分プロンプトからやると
アドレスがおかしなことになるからだと思う。

どうやればいい?
912nobodyさん:04/10/05 17:11:26 ID:???
>>911
BEGIN {
  push @INC, defined $ENV{'REMOTE_ADDR'} && $ENV{'REMOTE_ADDR'} ne '127.0.0.1'
    ? '/home/public_html/cgi-bin'
    : 'C:\Program Files\Apache Group\Apache\htdocs\public_html\cgi-bin'
}
913911:04/10/05 17:19:18 ID:eG43Pgsa
>>912
そうかdefinedか。
しかし&&ではなく||じゃないか?
まあ俺が間違ってそうだからテストしてみる
914911:04/10/05 17:23:40 ID:eG43Pgsa
う〜ん
&&だとローカルで成功
||だとサーバで成功

どちらも不完全・・・orz
915911:04/10/05 17:29:18 ID:eG43Pgsa
もしかしてSSHでには対応できてない?
サーバでもできるっていうのはサーバにシェルでつないで
perl -c
でっていうことなんだけど、それは無理かな?

判断基準がないのかな?REMOTE_ADDRだけでは無理だよね。
916nobodyさん:04/10/05 17:31:40 ID:???
アホか・・・
917nobodyさん:04/10/05 17:33:49 ID:???
>>915
じゃあ
$ENV{'DOCUMENT_ROOT'}
とか使ってみたら?俺の場合はローカルではc:始まりだけどサーバでは/usr始まりだから
それで簡単にできるけどね。
918nobodyさん:04/10/05 17:35:13 ID:???
HTTP_HOST
919915:04/10/05 17:35:49 ID:???
>>917-918
さすが!ありがとう。
920nobodyさん:04/10/05 17:38:32 ID:???
すみまそん・・・初歩的な質問で恐縮なのですが
コマンドプロンプトにPerlの構文を直接打っても機能するということを
もききにはさんだのですが、どうやればよいのでしゅか?
921nobodyさん:04/10/05 17:42:52 ID:???
perl -e "print 'nullpo';"
922920:04/10/05 17:46:37 ID:???
>>921
ありがとうございます。できましたけど失礼しますm(_ _)m
「ガッ!」

ところで10行くらいになる場合はどうやればいいのでしょうか?
print -e "
ここdEnterを押すと何故かキャンセルされてしまうのですが。
あと print =e "
このダブルクォートは他の記号で代替できませんか?
923911:04/10/05 17:56:43 ID:eG43Pgsa
>>916
やっぱ無理かな?
>>917-919
自演?
コマンドプッロンプオ上では環境変数持ってないからそえではだめなのよね。
924nobodyさん:04/10/05 18:01:54 ID:???
>>922
> ところで10行くらいになる場合はどうやればいいのでしょうか?

何が10行くらいになるのよ?perlのコード?出力?
perl -e "print qq/a\n/; print qq/b\n/; print qq/c\n/"

> このダブルクォートは他の記号で代替できませんか?

あんたの使ってるシェルによる。シェルの話は板違い。
925nobodyさん:04/10/05 18:02:35 ID:???
$ENV{'GATEWAY_INTERFACE'}
926nobodyさん:04/10/05 18:04:16 ID:???
>>923
手探りしてないでそれぞれの環境で
環境変数吐き出させて違いを調べたらどうよ。
927920:04/10/05 20:00:39 ID:???
>>924
windowsXPです。

>何が10行くらいになるのよ?
つまり

print 1;
print 2;
print 3;
print 4;

のような時に見栄えのために改行をしたいのですが、-eでやるとenterは実行になってしまって
改行にはなりません。

いわゆるmysqlでのEnterキーの昨日を求めています。
928nobodyさん:04/10/05 20:08:22 ID:???
>>927
C:\hogehoge\>perl
print "(゚д゚)";
print "<";
print "シメジ\n";
^Z ← Ctrl + Z
(゚д゚)<シメジ
C:\hogehoge\>

> いわゆるmysqlでのEnterキーの昨日を求めています。
( ゚д゚) ?
929nobodyさん:04/10/05 20:18:28 ID:???
>>928
^D では。cmd.exe だとどうかは知らんけど。
930920:04/10/05 20:20:57 ID:???
>>928
よくわかりません・・・
全然できないです
931nobodyさん:04/10/05 22:26:00 ID:???
例えば掲示板において強制改行されない半角文字
(いわゆるテーブルのデザインを崩す文字)
は正規表現でどう表せますか?

ピックアップしてみましたが
\ ^ . $ * ? | ( ) [ ] { }
0-9 a-z A-z
これで全部でしょうか?
932nobodyさん:04/10/05 22:30:16 ID:???
もぅ半角全部でいいじゃん
933nobodyさん:04/10/05 22:52:49 ID:???
>>931
HTML やブラウザの話は Web 制作板で。
http://pc5.2ch.net/hp/
934nobodyさん:04/10/06 00:12:28 ID:???
環境変数について質問です。
perl では ASP で言う ALL_HTTP に相当するものは無いんですか?
仕事のテストの都合でクライアントのリクエストを画面に出力したくて

print <<EOF;
Content-Type: text/html

<HTML>
<HEAD>
</HEAD>
<BODY>
$ENV{'ALL_HTTP'}
</BODY>
</HTML>
EOF

↑のようにコードを書いたんですが、何も出力されなかったので。
どなたかお知恵を貸してください。お願いします。
935nobodyさん:04/10/06 00:25:27 ID:???
すみません、環境変数では無理だったようです。
お騒がせして申し訳ありませんでした…。
936nobodyさん:04/10/06 00:30:44 ID:???
my $test = 'localhost/hoge/';

print "ここのURLは$testtest.cgiです";

みたいな時にコンパイラが間違わないように変数名をはっきりさせるにはどうすればいいですか?

print "ここのURLは{$test}test.cgiです";
勘でやりましたらエラーになりました;
937nobodyさん:04/10/06 00:38:18 ID:???
>>936
> 勘でやりましたらエラーになりました;
${勘に頼るな、マニュアル嫁}
938nobodyさん:04/10/06 01:18:41 ID:???
print 'ここのURLは'.$test.'test.cgiです';
939nobodyさん:04/10/06 01:46:09 ID:???
>>937
やっぱそれしかないか。
>>938
ヒアドキュメントないだったりするからね
940nobodyさん:04/10/06 02:02:59 ID:???
それしかないかって試しもせずに質問したのかよ。
しかも後出しで日亜ドキュメントとか・・・
941nobodyさん:04/10/06 02:06:12 ID:???
それしかないかって言われて気づいたんだろ
942nobodyさん:04/10/06 07:17:50 ID:???
>>937の意味が分かってなくて、「勘に頼るな、マニュアル嫁」に対して「やっぱそれしかないか」って言っただけだろ。

>>936
print "ここのURLは${test}test.cgiです";
943nobodyさん:04/10/06 08:07:40 ID:JNRSDhvA
>>895です
script produced no outputでググってみたけど
参考となる答えが見つかりませんでした。
参考となるサイトありましたら教えてください。
おねがいします。
944nobodyさん
>>943
ウソつけ。
ぐぐったら答えはいくつも見つかったぞ。
見つかるサイトをもっとよく読め。
ついでに、スレ違い。