perl5で、ローカルサーバーソフトHTTPDをしようしているんですが、
ヒアドキュメントがどうやってもうまく使用できません。
文法はきちんと書いているんですが、もしかしたら、ローカルサーバーでの設定、Perlのバージョンの問題かと疑いはじめました。
なにか問題点がありますでしょうか

このQ&Aに関連する最新のQ&A

A 回答 (3件)

補足です。


コマンドラインからの実行時には、

perl -w xxx.pl(xxx.plは任意のファイル名)

の様に実行して下さい。
    • good
    • 0

補足有り難うございます。


こちらの環境で試しましたが問題なく実行出来ますね。
一応確認なのですが、末尾の「HERE」の後は改行されていますか?
もし改行が入っていなかったら入れてみて下さい。
それから、もしtelnetが使えるのでしたらコマンドラインから実行してみて頂けますか。
おかしなところがあればメッセージが出力されると思いますので、御確認下さい。

この回答への補足

ありがとうございました。
HEREのあとに改行を入れるとなんなく動きました。

補足日時:2001/11/28 20:11
    • good
    • 0

使用出来ないのはヒアドキュメントだけなのでしょうか?


文法的なチェックがしたいので、出来れば該当部分を補足欄にコピー&ペースト(確実なので)して載せて下さい。
よろしくお願いします。

この回答への補足

たとえば、

#!/usr/local/bin/perl

print <<"HERE";
Content-type:text/html

<HTML>
<BODY>あああ</BODY>
</HTML>
HERE

というスクリプトで、HTMLドキュメントを生成できるはずなんですが、
どうしてもできませんでした。

補足日時:2001/11/28 17:30
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QPerlスクリプトが、ローカルでは実行できるが、HTTP経由では実行できない

現在Perlスクリプトを作成し
サーバにアップしました。

SSHでサーバにログインし

#perl a.cgi
と実行したところ(CGIとして動作させるため。中身はPerlスクリプト)

Content-type: text/html

<html>
<body>
あああああ
</body>
</html>

のようなメッセージが表示され正常に動作しているとおもいます。

しかし、
http://www.hoge.com/a.cgi をURLとしてブラウザ上で実行すると
500 Internal Server Error
になります。

パーミッションは755で正常
Perlのパスは#!/usr/bin/perlとしており、これも正常です。

文字コードはeuc-jp 改行コードLF

サーバはApache/1.3.33
Perlバージョンは5.8.4

自分のパソコン上でperl+HTTPサーバ(httpd)を使うと
HTMLふぁいるとして出力されます。
サーバ上でHTTPを使ってアクセスしたときのみエラーとなります。

このような現象が起こるのですが原因がわかりません。
お願いします。

現在Perlスクリプトを作成し
サーバにアップしました。

SSHでサーバにログインし

#perl a.cgi
と実行したところ(CGIとして動作させるため。中身はPerlスクリプト)

Content-type: text/html

<html>
<body>
あああああ
</body>
</html>

のようなメッセージが表示され正常に動作しているとおもいます。

しかし、
http://www.hoge.com/a.cgi をURLとしてブラウザ上で実行すると
500 Internal Server Error
になります。

パーミッションは755で正常
Perlのパス...続きを読む

Aベストアンサー

>500 Internal Server Error
これは、パーミッションの問題ではなく、実行エラーですよね。
一行目は以下だけですか? よけいなブランク文字やスイッチとか後ろに付いてると、サーバーによってはエラーにされてしまう事があります。
コマンドライン実行では、スイッチ有効なのでエラーにならないから、こういう現象になるのかも。
#!/usr/bin/perl

※ perl cgi覚えたての頃、一行目の後ろにコメントを付けていて、unix系サーバーにアップするとエラーになったのだけど、原因がわからず四苦八苦した覚えが。。。
windows local サーバーでは、一行目を無視してたので気付くのが遅れた。

あとは、実際のスクリプトの方を見ないことには?
なにか、そのサーバーでは使えないモジュールを使うような指定があったりとかしませんか?

Qperlですがヒアドキュメントについて質問です

<<"EOD";
EOD
とできますが、
<<"EOF";
EOF
も同じ意味になるのでしょうか。
他に同じ様なことはありますでしょうか。
宜しくお願い致します。

Aベストアンサー

> perldocですが、DOSプロンプトでしかみれないのでしょうか。
> htmlの形式かWEB上でみれないのでしょうか。

ActiveStateのサイトでは同等のものがHTMLベースのオンラインマニュアルとして見られますし、
ActivePerlをインストールすればローカルでも見られます。

参考URL:http://aspn.activestate.com/ASPN/docs/ASPNTOC-ACTIVEPERL/

QPERLでのヒアドキュメントの呼び出し

以下のようなCGIの改造を行いたいのですが、
sub abc{

ここ1
 ・
$check1=<<"EOF";
<HTML><HEAD><TITLE>test</TITLE></HEAD><BODY>
 ・
<img src="$directryname[0]" width = "80">
 ・
</BODY></HTML>
EOF
ここ2
print $check1;
exit;

ここ1、もしくはここ2のところに
$directryname[0] = "http://abc/aa/a.jpg";
を入れてもsub abc内のimgタグで..jpgが表示されません。
ヒアドキュメントでぐぐって見ましたが、適切な回答が得られませんでした。よろしくお願いします。

Aベストアンサー

私の環境下では正常に動作しました。
変な文字とかが入っていませんか?
(そのままコピペしたら?とか全角の空白とかがありました)
$directryname[0]を文字として出力して表示されないのでしたら代入のところを怪しんだほうがいいかもしれません。

Qperlで一行を一定の文字数で出力させるにはなにか、良い方法はありませ

perlで一行を一定の文字数で出力させるにはなにか、良い方法はありませんでしょうか?
なお、文字の途中で折り返すのではなく、単語(配列の一単語)単位で処理させたいと思っています。

[プログラム例]
#! /usr/bin/perl
@list = ("a", "bb", "ccc", "dddd", "eeeee", "ffffff");
{
local $, = ", ";
print @list;
}

[出力]
a, bb, ccc, dddd, eeeee, ffffff

[望む出力]
a, bb, ccc,
dddd, eeeee,
ffffff

※ printする前にlengthでバイト数を調べて、折り返すかどうかの判断をしないとだめなのでしょうか?

Aベストアンサー

formatではダメですか?

#!/usr/bin/perl
my @list = ("a", "bb", "ccc", "dddd", "eeeee", "ffffff");
my $text = join(', ', @list);<
format STDOUT =<
~~^<<<<<<<<<<<
$text
.
write;

参考URL:http://www.rfs.jp/sb/perl/02/11.html

Qperlのローカルプログラムでディレクトリのアクセス権を取得したい

お世話になっています。

Linux上で動作するperlのプログラムを作成しています。(ローカルプログラムでCGIではありません。)
このperlプログラムであるバイナリファイルを分割して別のディレクトリにコピーさせようとしているのですが、コピー先のディレクトリにプログラム実行ユーザーの書き込み権限があるかを調べたいと思っています。
ネットで調べたのですがこのような処理が出来るのかどうかも不明です。
もし、ご存知の方がおられましたらディレクトリの書き込み権限を調べる方法を教えていただけないでしょうか?
ヒントでもけっこうですのでよろしくお願いいたします。

Aベストアンサー

「ファイルテスト演算子」を使うと簡単です。

if(-w "/tmp/test"){
# /tmp/testは書き込み可能
}


人気Q&Aランキング

おすすめ情報