トップページperl
188コメント45KB

明日のタメに その1 (Perl使いへの道)

■ このスレッドは過去ログ倉庫に格納されています
0001ぴょん基地NGNG
明日のタメに その1 (Perl使いへの道)
ということで、一番シンプルな Perl で書いた CGI を
まったくの初心者でも、動かせるようになるように・・・
最初の難関がこれだと思うし、最大の難関でもあると思う。

#!/usr/bin/perl
print "Content-type: text/plain\n\n" ;
print "2チャンネル";
exit;

あなたは、これを動かせますか? (つまずいたら、質問してネ)
0002名無しさんNGNG
まず、メモ帳にコピペして、step.cgi のように
拡張子を cgi で保存しましょう。
0003所謂ひとつのPerl野郎NGNG
んーー。
「まったくの初心者」にはそれでも難しすぎると思いますよ。
そもそも一口に初心者といってもいろいろなレベルがあると
思うんですよ。たとえば、
プログラミングの初心者。
Perl の初心者。
CGI の初心者。などなど。
最後の人以外は、これを動かせますか?って聞かれたって
何をしていいのか途方に暮れると思います。実際、今の俺
ならそれくらい楽勝で動かせるけど、二年前、初めてPerl
をインストールしたときの俺には絶対、意味不明だったと
思う。
俺も一人の Perl 使いとして Perl 使いがもっと増えれば
良いと思うけど、正直こういう形では Perl 使いは育てら
れないと思う。そもそも2chは雑談や相談には向いてるけど
講座には向いていないと思うんです。
けちつけちゃってすいません。
0004ぴょん基地NGNG
いいのよ〜 > 3
それにしても saki は・・・
0005名無しさんNGNG
> print "2チャンネル";
Hello,world! じゃないところが素晴らしいです。
日本語を使うならやっぱり日本語で表示テストをしたい。

始めたての頃、何を見ても「Hello,world!」だらけだったので
何か特殊な語句だと思いこんでいた恥ずかしい過去・・・。
0006密かに期待していますNGNG
続けて。
0007名無しさんNGNG
「CGIスクリプトを作ろう!」みたいな本読んでるとつくづく思うけど、
まずは CGI より Perl と UNIX 自体を理解しないとお話にならないような。
Directory Permission 777 で置けとか言ってるのあるし。
0008名無しさんNGNG
本当に第一歩を踏み出す人の気持ちを、
もう忘れてしまっているのよネー
あっと言う間に、「あたりまえ」という感じになっちゃいます。
0009perl歴二日NGNG
>1
SSIで呼び出すんですよね?
で、出力された方のHTMLに表示させる。
・・・perlって、とっかかりにくい・・・
0010ぴょん基地NGNG
普通に、ブラウザから呼ぶんです。
http://www.aaa.co.jp/bbb/ccc/step.cgi
のように URL 欄に打ちこんで、で、2チャンネルって表示されれば Ok です。
0011perl歴二日NGNG
>ぴょん基地さん

出来ました!!
ありがとうございます。m(_ _)m
一歩一歩、頑張ります!
0012ぴょん基地NGNG
よかったね > 11
この壁が、私にとっても一番大きかったです。
最初の1行目とか、パーミッションとか・・・
あとは、Perl のお勉強ですね、私も勉強中です。
0013名無しさんNGNG
この板の各スレッドを見てみても
Perlの具体的なスクリプトを出し合ってのやりとりがあまり見られないね。

なんか、おまえら、ぜんぜんダメじゃん。
たとえば、Perlで掲示板なんか作れたって、
専門職として生きられるだけのスキルとはいえないぜ。
チャパツの知恵遅れ専門学校生の時給800円ぐらい価値はあるかも知れないけどね。

ここは、とにかくバカが多すぎ、やめれPerl板なんて。
0014名無しさんNGNG
なにあせってるの ? > 13
なんかほしいの ?
0015名無しさんNGNG
何を期待してるだ?>13
人に期待する前にてめーでまずネタふれよ。
チンカス溜まりすぎだろ?
0016名無しさん>13NGNG
perlなんてお遊びだもん。本気で組みたきゃCにするさね。
0017>13NGNG
つうかパールやって楽しいんだからいいじゃん。笑
0018>13NGNG
HP板より

253 名前: 名無しさん@1周年 投稿日: 2000/05/26(金) 01:20
うはは。知恵遅れどもが、他人のページ、逝っちゃってるとは...
このスレッドは、いじめの温床だな。

8 名前: 名無しさん@1周年 投稿日: 2000/05/26(金) 01:16
HEADタグの中にこう書くんだよ。知恵遅れども。
<HEAD>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
</HEAD>
こんなことにも答えられないでいて、他人のページ、逝っちゃってるか...
ほんとうに逝っちゃってるのは、どちらかというと...

オマエダロ
つ〜かスキルとか言ってる時点でダメダメ。
0019>13NGNG
>チャパツの知恵遅れ専門学校生の時給800円ぐらい価値はあるかも知れないけどね。
日本語間違ってますが。
0020初心者質問ですNGNG
print "Content-type: text/plain\n";
print "\n";

と書くところを
print "Content-type: text/plain\n\n" ;
のように省略したほうが美しいですねぇ。勉強になりました!
0021初心者3号辺りNGNG
自分はなんとなく下の様に書いてます。何にも変わらないけど。
print 'Content-type:text/plain'."\n\n";

13は相手するだけ無駄な様な。
0022名無しさんNGNG
13=厨房
14=15=16=17=18=19
20=女
0023>22NGNG
>20=女

な、なぜ(;´Д`)
0024>23NGNG
「美しい」って言葉を使ったからだったりして。(笑)

0025>23NGNG

声に出して読んでごらんよ。
0026>25NGNG
解った!「ですねぇ。」の部分ですね?
0027そんなわけないだろNGNG
しかし、その可能性は否定できないな
0028名無しさんNGNG
n88 basic 覚えてると友人に話したら
「じゃあPerlがオススメ!俺はJavaやるけどね。」
だそうです。そんな僕はどこから手をつけるべきでしょうか?
いきなりJavaはやめとけってことかな?
0029>28NGNG
プログラミングを習得したいならJavaのがベターじゃない?
(ただしJavaScriptじゃない方)
Perlは良くも悪くも特殊。
0030名無しさんNGNG
perlは高級(プログラミング)言語の側面と、正規表現対応文字列操作コマンドの側面を併せ持っているからね。
単純にプログラミング技術を憶えたい、というのであればJavaのほうがベターかな。
でも、清く正しく美しいプロミングを憶えるよりも、泥縄でもとりあえず自分の実現したい機能を作りたい、ということであったら話は別ね。

0031悪魔くんNGNG
MacPerlを昨日DLしました、とりあえず1のソースを
実行することは出来ましたがPerlの構文がいまいち分からない。
CGIできれば飯の種に困らないと思いましたがなかなかどうしてですな。

本買いに行こうと思いますが、お奨めの書籍ってありますか?
一応、CとBASICとアセンブラは使えますが・・・。
0032名無しさんNGNG
そっち系の学生?
CGIだけじゃ飯の種にはならんよ。
0033悪魔くんNGNG
うーん、VB出来ても金にならないんで、
サーバ構築込みでPerl書きになりたいなーと。
Unixもロクにわからん若輩者ですが、30越えてます。
っていうか、要は企業がやりたいことを
如何に独自の手法で実現するか、
でもって模倣されるまでにシェアを稼げるか、です。
Cでオープン系というのも歳食い過ぎたんで、
口と手先で商売できるようになりたいと。
0034名無しさんNGNG
おれ 40超えてます。がんばって Perlも覚えました。
もとは C , C++ 屋さんです。 unix も「使える」という程度の
知識しかありません。
いつまで、書くのかなァ・・・
0035>NGNG
Perlの構文ということだけなら、リャマ本とラクダ本だけど。
0036名無しさんNGNG
28さん、n88 basic を覚えているのならばここはいかが?
http://www.orange.ne.jp/~kibita/n88/
0037名無しさんNGNG
ファイル読み込み時のエラー処理をしたいのですが
open (LOG, "$hoge") || die "Errorですよお客さん :$!\n";

で試した場合、Errorですよお客さんが表示されずに500エラーになってしまいます。
どこか他にもおかしいところがあるのでしょうか?
0038>37NGNG
CGI ですよね。die は STDERR に出力するので、ブラウザなどの呼び出し側には
何も返らず、エラーになります。

open( LOG, "$hoge" ) || &error( 'Errorですよお客さん' );

sub error{
  my $msg = shift;
  print "Content-Type:text/html\n\n";
  print "<html><body>$msg</body></html>";

  exit;
}

こんな感じにします。
0039ぴょん基地NGNG
その shift というのは、どういう意味なんですか ? > 38
$_[0] と同じ意味なんですか ?
0040トルエン監督NGNG
>39
shiftっていうのはね、関数のひとつで一試合で3ゴール決めた時の事を言いますが?
0041名無しさんNGNG
>39
引数(?)を省くと、(サブルーチンの中では) @_ の先頭から1要素取り出します。
@_ の先頭が無くなる以外、$_[0] と同じです。
0042ぴょん基地NGNG
ぬあーるほど、 > 40,41
Perl には、いろいろな関数があるんですね〜。
0043名無しさんNGNG
print <<END_OF_DATA;
Content-Type:text/html

<html><body>$msg</body></html>
END_OF_DATA

って方が、"を\"って書いたりしなくていいし、
出力イメージっぽく書けるので好きなのですが、邪道?
004438NGNG
>43
あ、単に私がいろいろ無知ないんで、いちおうなんです。

HTTPヘッダ(?)のあとには「空行を入れる」らしいですけど、
43さんのように書くと、たとえば Windows で書いたときに
Content-Type: text/html\r\n
\r\n
<html>...

となって、Mac とか UNIXでは空行と判定されないんじゃないか、とか…。
ここらへん詳しい方、教えてくれると嬉しいです。
0045ぴょん基地NGNG
わたしの場合は、1行目だけ明示的に \n\n を入れています。
あとで修正等行うときの事故予防と考えています。

print "Content-Type:text/html\n\n";
print <<EOF;
<HTML><BODY>
あげ
</BODY></HTML>
EOF

0046名無しさんNGNG
>44
大抵の人はサーバへFTP転送でしょうから、ASCII転送だし問題なし
だとおもう。Win->UnixでASCII転送しないと動かないよね?

でもさ、プロトコル的にはヘッダと本体のセパレータは2つの連続
したCRLFで区切られるって定義されてるはずだから、それをさらに
Webサーバが\r\nに変換してるんだろうね。
っつーのは「明日のタメに」とかに書くネタじゃないね。ごめん。
0047NGNG
借り物のperlスクリプトは使ってましたが、一から勉強中です。

まずは、こんな簡単なスクリプトを書いてみて、成功しました。
http://thunder.prohosting.com/%7Eysc/cgi-bin/test/first_cgi.txt
http://thunder.prohosting.com/%7Eysc/cgi-bin/test/first.cgi

で、次に、time関数を使ったこんなスクリプトを書いてみたんですが、動きません。
http://thunder.prohosting.com/%7Eysc/cgi-bin/test/date_cgi.txt
http://thunder.prohosting.com/%7Eysc/cgi-bin/test/date.cgi

「CGI入門講座」(オーム社)という本に掲載されているモノをそのまま打ち込んだんですが。
testディレクトリ及びCGIのパーミッションは705、転送はアスキーモードです。

何故動かないのでしょうか?ご教授お願いします。
0048名無しさんNGNG
多分
print "$year/$man/$mday $hour:$min:$sec\n";
ここの行が失敗だと思うよ
print "$year\/$man\/$mday $hour:$min:$sec\n";
"/"使うときは"\"でエスケープしといたほうが無難
それと記述ミスっぽいけど$manってのは定義してないから
$monにしとけ
あとは
($sec,$min,$hour,$mday,$mon,&year,$wday,$yday,$isdst) = localtime(time);
ここの&yearを$yearに直すとか
0049名無しさんNGNG
3行目の &year が原因。
人に聞く前に perl -cw date.cgi でチェックしてくれ。
0050ぴょん基地NGNG
$year += 1900 ; もやっておいたほうが良いと思うぞ
y3k 対策として、
0051NGNG
>48さん、49さん、ぴょん基地さん ありがとうございます。
……ケアレスミスでしたね。大変申し訳ありませんでした。
上手くいきましたです。
http://thunder.prohosting.com/%7Eysc/cgi-bin/test/date_cgi.txt
http://thunder.prohosting.com/%7Eysc/cgi-bin/test/date.cgi
0052dustNGNG
せっかくよいスレッドなので、一度あげておきます。
0053名無しさんNGNG
age
結局初心者に対しては1だけじゃん、、続きお願いします
0054名無しさんNGNG
ていうか、他の言語のプログラミング経験者でないと、Perlの良さって分からなくない?
CGIがPerl標準だから使ってるだけだろ?
0055名無しさんNGNG
ついでに、自分がよくやるのは

>#!/usr/bin/perl
じゃなく、普通に#!/usr/local/bin/perlのままじゃ自分家のLinuxで動かんかった。
samba経由でファイルコピーしたらCRLFがそのまんまで動かんかった。
suExecにしたらotherの書き込み権限で動かんかった。
同じくファイルの所有権がwheelグループだったら動かんかった。

こいうのが多いが、しょっちゅうやってしまうので頭が痛い。
0056名無しさんNGNG
Perl4 でも Perl5 でも
#!/usr/bin/perl
この部分は、同じなんですか?
0057名無しさんNGNG
>56
サーバによって違う。
普通は #!/usr/local/bin/perl か #!/usr/bin/perl のどちらか。
基本的に perl がインストールされているパスを書く。
telnet が使えれば which perl で出てくるのでそれを書くのだが、
フリーのとこならたいてい CGI の説明のとこに書いてあるので
よく読むべし。

0058名無しさんNGNG
たまに -w とかついてるのは、なぜなんだろう?
なにか おまじない ?
0059名無しさんNGNG
デバック用とか、、、
0060名無しさんNGNG
>58
59 のいうとおりデバッグ用です。
具体的には、コマンドラインから perl と打って起動するときに指定するオプションを、
シェルが perl を起動するときに付ける場合ここに書くことになります。
-w は詳細なエラーメッセージの出力ですが
普通 CGI がエラーになると Internal Server Error になって
エラーメッセージは表示されないので無意味です。
0061名無しさんNGNG
ありがとうございます。
0062名無しさんNGNG
Content-type: text/html

Content-type: text/plain
ではどのような違いがあるのでしょうか?
0063名無しさんNGNG
text/plain だと、タグがそのまま表示される。整形してくれない。
つーか、聞く前にやってみろ。
0064名無しさんNGNG
htmlの
<body bgcolor="#FFFFFF" onload="setInterval('scroll()',200)">
をCGIで出力させたくて
print "<BODY bgcolor='#FFFFFF' onload='setInterval('scroll()',200)'>\n";
とやってみたんですけど、うまくいきません。。
たぶん onload="〜"をonload='〜'に直してるからだと思うんですが、
こういう場合どうしたらいいでしょうか??
0065japuNGNG
print qq[<body bgcolor="#FFFFFF" onload="setInterval('scroll()',200)">];
or
print "<body bgcolor=\"#FFFFFF\" onload=\"setInterval('scroll()',200)\">";
0066名無しさんNGNG
print qq{<body bgcolor="#FFFFFF" onload="setInterval('scroll()',200)">\n};
0067名無しさんNGNG
かぶった(TT
006864NGNG
>65,66さん
早速ありがとうございました。動きました。

このインターネット時代に掲示板で教えてもらわないと、ものを調べられないというのは致命的だなぁと思う今日この頃でした。
マニュアルとかも読めないし。。。ギャフンッ!
0069japuNGNG
とりあえず『プログラミングPerl (改訂版)』を買っておくのが吉。
(英語版はそろそろ3版出るけど。)
0070初心者です。。NGNG
自分のHPに来て頂いた方が、どちらから来たのか知りたいと
思って以下の様なプログラムを作ってみました。
でも、ぜんぜん上手くいかないのです。
『500 Internal Server Error』なってしまいます。
どなたか、どこがどういけないのか教えて下さい。
ヨロシクお願いします。

#!/usr/local/bin/perl
#アクセスログ取得
#
#
open(FILE, "hoge.dat");
@allbody = <FILE>;
close(FILE);
$tmp = $ENV{'HTTP_referer'};
unshift (@allbody, $tmp);
open(FILE, ">hoge.dat");
print FILE @allbody;
close(FILE);
exit;
007162NGNG
ごめんなさい。逝きます。。
0072>70NGNG
hoge.dat は先に作って 0666 にしてる?
0073初心者です。。 NGNG
はい、してます。
007472NGNG
これ、どうやって呼んでるの?
SSIならいいけど、直接呼んでるならHTM出力してないから
エラーになるけど。(あ、SSIでもヘッダ出さないと駄目だな)
あと、HTTP_REFERER ってやんないと拾えないと思う。
ファイルはアペンドモードにすれば全部読む必要は無いよ
007572NGNG
>SSIでもヘッダ出さないと駄目だな
#exec cmd ならヘッダいらないけどね
0076初心者です。。NGNG
直接呼び出してます。
これが原因でしたか。
どこから来たのかファイルへ書き込みたいと思ったのですが、
HTMへ表示させようとは思ってなかったのです。。。
しかし、何を表示すればいいのやら。
HTTP_REFERER はダメダメですね。ケアレスミスでした。
72さんホントにありがとうございます。
今すぐ試してみます。
0077初心者です。。NGNG
>72さん
ファイルにちゃんと書き込んでくれました。
ありがとうございます♪

0078名無しさんNGNG
ぴょん基地さん、その2は無いんですか?
0079トリニティー、ヘルプ!!NGNG
Winで1を試したいんだけど、どうしたらCGIが使えるようになるの?
パールは入ってます。
0080トリニティー、ヘルプ!!NGNG
無料で、インストールが簡単なのない?
0081名無しさんNGNG
>79,80
AN HTTP Server
http://www.st.rim.or.jp/~nakata/
を入れるのがいいっす。無料。
0082トリニティー、ヘルプ!!NGNG
どうもっす。やってみます。
0083名無しさんNGNG

質問するときは自分でスレッドを立てて質問しなさい。そうしないと
この板が寂れます。スレッドを立てると活気付きます

-----------------------完------------------------

0084名無しさんNGNG
寂れる理由は違うと思うけど ?? >>83
0085名無しさんNGNG
2ちゃんるるは、情報の交換場所だからね、、、
0086名無しさんNGNG
print "$str" と print $str は
何か違いがあるのでしょうか…
ご教授頂ければ幸いです。
0087>86NGNG
スレッド立てて質問しなさい


-----------------------完------------------------
0088>86NGNG
そもそもあなた、なんでこのスレッドに書いてるの?あんな題名だからって
ここに書くのは失礼です。
008986NGNG
> 87,88
やたらめったらスレッドを建てるのが良いとは
とても思えないので(ましてやあの内容で)、
簡単な質問が過去にも為されているこのスレッドで質問しまスた。
0090>83NGNG
こんなのはたてて欲しくないな。
http://tako.2ch.net/test/read.cgi?bbs=perl&key=962312787
0091名無しさんNGNG
http://mentai.2ch.net/test/read.cgi?bbs=prog&key=957778266
http://www.2ch.net/test/read.cgi?bbs=unix&key=960842615
同じバカがいろんな所で繰り返してるぞ。
レスを全部読む方法を知らないらしい。
0092名無しさんNGNG
AN HTTP Server
http://www.st.rim.or.jp/~nakata/
使い方意味不明。他に無い?
0093名無しさんNGNG
それより面倒なのならいっぱいあるけど。
0094名無しさんNGNG
>92 はぁ?どっかきえなさい
0095>92NGNG
あ、それね。ドリームキャスト用じゃないんだよ。
0096>92NGNG
異様に簡単でないかい?
0097>92NGNG
http://www.apache.org/
変わり
0098>92NGNG
http://www.apache.org/
代わり
0099>92NGNG
http://www.microsoft.com/JAPAN/win95/modules/psw.htm
終わり
0100名無しさんNGNG
半径12.5センチの円の円周を求めるプログラムを書きましょう(藁
0101>100NGNG
円の円周って、どうやって求めるんだっけ?(藁
いや、マジで忘れたのよ(藁
■ このスレッドは過去ログ倉庫に格納されています