月宮あゆのPerl教室 Part.4
■ このスレッドは過去ログ倉庫に格納されています
0001月宮あゆ
02/02/19 14:34ID:???〃┏━━ 、
パタパタ | ノノソハ))) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(((\リリ ´ー` リ < うぐぅ♪
((ニE/⌒ヾ∞"ヽ \____________
(こ) ∞ |こ)
く__∞,ノ
し' し'
0363nobodyさん
02/12/10 21:21ID:???0364月宮あゆ ◆XalkKQX1is
02/12/10 22:32ID:???|. ノノソハ)))
(\リリ ´ー`)リ < サブルーチン (2) 返り値
(ニE(#つo⊂#)
サブルーチンでは、返り値 (かえりち) っていうものが作れるよ。
「返り血」とか変なこと言ったら嫌だよ。
$x = &xxx; # $x には abc が代入されるよ。
sub xxx{ return "abc"; }
return ●
…●を返り値として、呼び出し元に戻る。
ちょっとここで注意だけど、この関数は、絶対にサブルーチンの外で
使っちゃだめなんだ。戻る場所がないからね。
ふたつ以上の返り値を送りたいなら、
return ( $a, $b, $c );
みたいに配列にして送るといいよ。
受け取るときは、
( $a, $b, $c ) = &xxx;
こうやって受け取ることができるよ。
それか、配列をあらかじめ作っておいて、
return @xxx;
@xxx = &xxx;
みたいなこともできるよ。
0365月宮あゆ ◆XalkKQX1is
02/12/10 22:38ID:???もうすこし先で勉強するからもうちょっとまってね。
>>352-355
サブルーチン、はとりあえず (4) か (5) まで続くと思うよ。
今は (4) の途中まで書いてるからね。。
>>356
確かに、オートインクリメント演算子は、「1足す」じゃなくて、
「値を1増加させる」っていう機能なのはその通りなんだけど、
そんな扱ってないようなことを勝手に進めないで。
先に「省略してるところもある」ってちゃんと言ってるんだから。
そんなことはあまり知る必要ないんじゃない?
>>358
必要最小限のことは付け足すからね。
>>363
ボクはPHPはほとんどできないんだよね。。
勉強するにもPHPの入門書が数ないからねえ。。
0366nobodyさん
02/12/11 07:08ID:???重箱の隅をつつくようだけど、実はサブルーチンの外でもreturnを使えるケースがあるんだよね。
標準ライブラリの中にもその使い方をしているものもあるよ。
ところで、-wスイッチとuse strictの説明の予定はあるの?
コーディングを楽にするためにも、まずその説明をした方が良いと思うね。
>>366
同じ意味だと思うよ。
0369nobodyさん
02/12/11 23:34ID:M9dNCh9D0370nobodyさん
02/12/12 08:30ID:???0371nobodyさん
02/12/12 10:53ID:SmMSqgPFforeach
これってフォーイーチ?
フォーリーチですか?
気になって仕方ないです…
お願いします。
for eachだから、そのように。
0373nobodyさん
02/12/12 12:12ID:???0374371
02/12/12 12:18ID:SmMSqgPFそれはあんまりです(笑
0375月宮あゆ ◆XalkKQX1is
02/12/12 20:52ID:???|. ノノソハ)))
(\リリ ´ー`)リ < サブルーチン (3) 局所化
(ニE(#つo⊂#)
サブルーチン、といえばこの関数はよく出るから覚えておいてね。
my と、 local と、 return だよ。
return は、もう勉強したからいらないね。
じゃあ、今回は my と local について勉強するね。これはほとんど同じ意味だよ。
だから、ここでは同じものとするね。いつか機会があれば、説明するね。
my ●;
local ●;
…どっちも、変数●または配列●を、そのサブルーチンの中だけで
有効にする、っていうことだよ。
my 宣言された変数を、プライベート変数、 local はローカル変数、っていうよ。
逆に、スクリプト全体で使える変数をグローバル変数、っていうよ。
【いちばん内側の { } で囲まれた範囲だけで有効な変数】っていうことかな。
この有効範囲を、スコープ、っていうよ。
my $xxx; # $xxx を my 宣言する
$xxx = "abc"; # 前の行で my 宣言されている
$yyy = $xxx; # $yyy は my 宣言されていない
my $zzz = "xyz"; # $zzz はここで my 宣言される
じゃあサンプルだよ。
$my = "abc"; $test = "abc";
&xxx;
print "my 宣言した変数=$my<br>\nしてない変数=$test";
sub xxx{ my $my = "xyz"; $test = "xyz"; }
0376月宮あゆ ◆XalkKQX1is
02/12/12 20:55ID:???うん、同じだね
>>367
eval の中かな?
eval はまだ取り扱ってないから、出てきたときに説明しようと思って、
こんなところで「eval」って出したら混乱する人もいそうだから、
あえて説明しなかったんだよね。。
-w とか strict は、知っておいた方がいいことだろうね。。
-w は未定だけど、 strict はそのうち勉強する予定だよ。
>>371
ふぉーいーち、だと思うよ
0377くせ〜
02/12/12 21:35ID:???このあゆ、汗っかきだなあ
このあゆ、ワキガ??
0378かわいくしたよ
02/12/12 22:02ID:???〃┏━━ 、
パタパタ | ノノソハ))) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(((\リリ *´ー゚*リ < うぐぅ♪
((ニE/⌒ヾ∞"ヽ \____________
(こ) ∞ |こ)
く__∞,ノ
し' し'
0379nobodyさん
02/12/12 23:14ID:???| う う |
| ぐ う / ̄ ̄ ̄ ̄ ̄ ̄
| ウ | < うげぇ
\__/ \______
. r‐-i^i´`||iii》ヽ
(_| | i/二フ.〉
(__|_ゝ、__[]_ア
/ l| |
/fヨI 中|
く l| |
` ‐r-十!
ノ ! !
/ゝ,/ー|
/ /l |
/ f《 |fヨ |
. \_)_ノ
0380nobodyさん
02/12/12 23:34ID:???そういえばevalもそうだっけ。でもそれ以外にもあるよ。
実はrequireされるライブラリファイルの中だとreturn出来るんだよ。
例えばAnyDBM_Fileがそうしてる。
ま、普通は使わない機能だけどね。
0382nobodyさん
02/12/13 02:31ID:???subroutine, eval, do FILE ... みたいですね。
ライブラリの中って言うのは、よくモジュール等の最後に 1; ってやるけど
あれって、return が省略されていたんだ?
そういえば、sub 内でも定数とかを返すだけのサブルーチンでは
return省略してるの良く見かけるよなぁ
0383nobodyさん
02/12/13 03:08ID:???> あれって、return が省略されていたんだ?
ちょっと違う。
returnがない場合、最後に評価された式の結果が返される。
1; というのは式1;の値は1だから1が返る。
…って動作のはず。
0384nobodyさん
02/12/13 06:33ID:???0385nobodyさん
02/12/13 14:56ID:TqDERRP10386nobodyさん
02/12/13 15:12ID:???0387nobodyさん
02/12/13 15:46ID:???睾丸無知
0389nobodyさん
02/12/16 01:42ID:/+dGpF860390しぼーん
02/12/16 17:40ID:???0391ショボーン
02/12/18 02:07ID:???0392月宮あゆ ◆XalkKQX1is
02/12/19 20:55ID:???|. ノノソハ)))
(\リリ ´ー`)リ < サブルーチン (4) 引数
(ニE(#つo⊂#)
引数、っていうのは、「ひきすう」って読むらしいよ。
ボクはこのあいだまで、「いんすう」だって思ってたんだけど。。
サブルーチンから値を持って戻る、っていうことをやったね。
じゃあ次は、値を持ってサブルーチンを実行するっていうことをやるね。
&xxx("abc", "123", "あいう");
こんな風に呼び出すと、特殊配列 @_ に頭から代入されて呼び出されるよ。
当然、
@list = ("abc", "123", "あいう");
&xxx(@list);
と同義だよ。
この辺の話を覚えて、次回は、名無しさんならエラー、っていう
ソースに改造してみるよ。
#投稿が遅れてごめんね。
#遅れてもdat落ちや削除されない限り途中で放棄することはないからね。。
0393月宮あゆ ◆XalkKQX1is
02/12/19 20:58ID:???そうなんだ‥
知らなかった
ちょっと恥ずかしいな
>>384
えっ
そんなにあるのっ?!
なんだかすごいね
>>385
Perl、ってクラスって言うのかな…?
呼び方とかよく知らないや。。
>>389-391
遅れてごめんね。
0394 ◆soCKet026k
02/12/21 01:51ID:cbygjUhv0395Perlは時代遅れ
02/12/21 18:38ID:???月宮あゆのPHP教室きぼんぬ
0396nobodyさん
02/12/21 18:58ID:???で、PHPの勉強にすることにしたので、
おれもPHP教室を希望します。
ちょっとづつでいいのでお願いしたいです。
0397nobodyさん
02/12/21 19:50ID:???0398nobodyさん
02/12/21 20:29ID:???確かに今さらPerlっつってもね。
でも、月宮あゆ君はよくがんばってると思うよ。
今後もがんばってもらいたいね。Perlで移行!!。
0399nobodyさん
02/12/23 03:38ID:1Wxw8/wHいや、なにか役立つでしょ。うん。
それとも先にcかphpを勉強した方が良いのか・・・?
0400nobodyさん
02/12/23 04:21ID:???趣味にやってるぶんには頭の体操になるしPerlでも良いと思うよ。
Cは用途が違うし難易度が高いから、始めるならPHPのほうが良いと思うよ。
がんばろっ♪
0401nobodyさん
02/12/23 20:45ID:???使い捨てスクリプト書くのとかにはPerlはすごく便利だよ。
CとPerlは構文が似てるし、Perlをやっても全くCに役立たない、という訳でもなし。
0402399
02/12/23 22:05ID:???レスどもです。
Perlは勉強していきます。役には立ちますよね。
次にPHP、そしてCという順にやっていきます。がんがります。
0403nobodyさん
02/12/23 23:37ID:???Perlは今後、使用者は減るけど使えないわけじゃないから勉強してもいいと思うよ。
でも、最終的にCするんだったら、ぼくはPHPを強く勧めるよ。
Perlから始めちゃうとPerl独自の癖がつくのでPerlしかできなくなる危険性があるので、
PHP勉強した後、Perlを勉強したほうかいいかもしれないね♪ がんがれ!
0404月宮あゆ ◆XalkKQX1is
02/12/24 07:18ID:???|. ノノソハ)))
(\リリ ´ー`)リ < エラー画面を作る
(ニE(#つo⊂#)
じゃあ、まずはソースだよ。
ttp://www.geocities.co.jp/SiliconValley-Sunnyvale/8274/perl/perl0007.txt
&error("エラーメッセージ");
としてサブルーチンを呼びだすと、
( 特殊配列 @_ の0番目の要素だから $_[0] )
エラーメッセージが $_[0] に入って参照するようになってるよ。
こういうエラーのサブルーチンはよく見かけるね。
ぜひ使えるようにしようね。
次回は、環境変数について勉強するね。
0405月宮あゆ ◆XalkKQX1is
02/12/24 07:21ID:???うん、遅くなってごめんね
>>395-396
ボクも今、PHPは勉強してるところなんだよね
ちょっとボクにはできそうにないよ
ごめんね
>>397-402
確かにこれからはPHPの時代に変わっていくかもしれないね。
>>403
elsif 、とかPerl以外にみたことないよ。。
0406nobodyさん
02/12/24 14:14ID:???0407nobodyさん
02/12/24 20:36ID:???Python だと elif
PHP では、 elseif, else if
Perl で、無理に独自のスタイルに馴染まなくても
C ライクなプログラミングも出来るよ。
0408 ◆soCKet026k
02/12/24 23:28ID:2kS8TiT1ソースのHTMLが解釈されて見にくいぽ。。。
0409nobodyさん
02/12/25 00:07ID:???あゆタン
0411nobodyさん
02/12/25 14:14ID:???>Perl で、無理に独自のスタイルに馴染まなくても
>C ライクなプログラミングも出来るよ。
独自スタイルを使わずしてPerlは動くのか?
C知らずしてCライクは無理だろ。もうちと考えてかけよ。
0412(´・ω・`)
02/12/27 23:58ID:???0413nobodyさん
02/12/29 18:10ID:uoxci6sX0414nobodyさん
02/12/29 21:05ID:???0415nobodyさん
02/12/31 13:32ID:qLQW6luAオマエモナー
0418月宮あゆ ◆XalkKQX1is
03/01/02 14:41ID:???|. ノノソハ)))
(\リリ ´ー`)リ < 環境変数 (1)
(ニE(#つo⊂#)
環境変数っていうのを勉強するね。
環境変数は、 %ENV っていうハッシュに入ってるよ。
特に何もしなくても、実行すると自動で使えるよ。
これは、プログラムのどこでも使える、グローバル変数だよ。
じゃあ、全部の環境変数を表示してみようね。
foreach (keys %ENV){
print qq{$_:$ENV{$_}<br>\n};
}
ここで出てきた、 keys について説明すると、
「ハッシュのキーを全部とりだす」っていう感じだよ。
このへんはまた今度やろうね。
よく使う環境変数を説明するね。
$ENV{REMOTE_ADDR} : リモートアドレス(IP)が入ってるよ。
$ENV{REMOTE_HOST} : リモートホストが入ってるよ。
$ENV{HTTP_USER_AGENT} : 使ってるブラウザとかのデータが入ってるよ。
$ENV{HTTP_REFERER} : そのページへのリンク元アドレスが入ってるよ。
こんな感じかな。
次回は他の環境変数と、スペースがあまったら実用例を書いてみるね。
0419月宮あゆ ◆XalkKQX1is
03/01/02 14:44ID:???>>406
無料サーバかな?
規約違反するなら infoseek かトクトク
規約違反しないなら XREA がいいと思うな
>>407
Python なんて言語聞いたことない…
他は聞いたことあるけど。。
>>408
ボクもよくわからなかったんだけど410さんが言うにはIEの仕様みたいだね・・・
これはしかたないね
>>409
今は、あけましておめでとう、っていう時期になっちゃったね
ごめんね
>>413
見てくれてたのかな、ありがとうね
これからできるだけ顔を出したいと思ってるんだけどね
最近いそがしくて・・
0420nobodyさん
03/01/03 22:48ID:jx+nlJxMあけおめ、ことよろ、ガンガレ
0421nobodyさん
03/01/05 00:33ID:???0422nobodyさん
03/01/05 14:58ID:???|. ノノソハ)))
(\リリ ´ー`)リ
(ニE(#つo⊂#)
0423月宮あゆ ◆XalkKQX1is
03/01/06 19:32ID:???|. ノノソハ)))
(\リリ ´ー`)リ < 環境変数 (2)
(ニE(#つo⊂#)
他の環境変数だよ。
環境に依存するものとか、まったく使わない、と思うのは省いたよ。
$ENV{REQUEST_METHOD} : リクエストされたメソッドだよ。普通は GET か POST だよ。
$ENV{HTTP_HOST} : そのスクリプトが動作してるサーバのアドレスだよ。
$ENV{QUERY_STRING} : xxx.cgi?xxxx っていう感じでアクセスされたら、 ? 以降の文字が入ってるよ。
$ENV{CONTENT_LENGTH} : 送られたデータの総容量だよ。
$ENV{HTTP_COOKIE} : クッキーの情報がはいってるよ。
あとは、プロキシの判断をするときに、
HTTP_CACHE_INFO HTTP_FORWARDED HTTP_IF_MODIFIED_SINCE
HTTP_PROXY_CONNECTION HTTP_VIA HTTP_X_FORWARDED_FOR
とかの環境変数を目安にすることもあるね。
じゃあ、次回は、掲示板に書き込んだ人のリモートホストを解析して、
保存するように改造してみるね。
※ $ENV{REMOTE_HOST} では取得できないサーバーが最近増えてるよ。
こんなサーバーは、 gethostbyaddr 関数を使わないといけないんだけど、
使い方はまた今度説明するね。
gethostbyaddr 関数も使えないサーバーもあるらしいよ。。
こんなサーバーは(たぶん)どうやってもホスト名は取得できないよ。
わからないことがあったら、サーバーの管理人さんに聞いてね。
0424月宮あゆ ◆XalkKQX1is
03/01/06 19:33ID:???おめでとう、今年もよろしくね。
>>421
ん?なに?
>>422
Janeで読んだら「ここ壊れてます」、って言われる
なんでだろう
0425nobodyさん
03/01/06 23:38ID:???0426とりあえず
03/01/07 01:03ID:mvf11T4j0427nobodyさん
03/01/07 22:45ID:???0428>427
03/01/08 01:50ID:???0429nobodyさん
03/01/08 11:47ID:???そういや1月7日はあゆちゃんの誕生日だったっけ。
おめでと〜。
関係ないけど、
このスレでの「月宮あゆ」は共有コテにして、トリップだけ別々にすればいいと思うが。
俺は「C言語CGI」スレの住民だけど、あゆのレスが面白くてこっちにもいてみたり。
0430PHP月宮あゆ
03/01/08 12:04ID:???つぅかnobodyさん−>月宮あゆ
を提唱しようではないか。と。
取りあえず次スレはWebProg総合スレにして欲しいっす。
初心者スレとかも良いかもね。
0431月宮あゆ ◆XalkKQX1is
03/01/08 20:48ID:???|. ノノソハ)))
(\リリ ´ー`)リ < 環境変数 (3)
(ニE(#つo⊂#)
じゃあ、掲示板に書きこんだ人のホストを記録するよ。
簡単に言うと、ログファイルに記録すればいいんだけど、
ログファイルにそのまま記録しちゃうと、読む人にホストが見えちゃうんだよね。
たぶんここにいる人たちはホスト開示、っていうのは嫌だと思うんだ。
コメントにする、っていうのも、ソースを見られたらばれちゃうよね。
じゃあ、こんなことをしてみよう。
書きこむときに
<a href='mailto:メール'>名前</a>>メッセージ
っていう書き方をやめるんだ。こうじゃないとホストが筒抜けになっちゃうからね。
じゃあ、ホストを記録できるようにするには、
<a href='mailto:メール'>名前</a>>メッセージ(ホスト)
みたいにして、表示するときに消してやるといいよ。
表示する欄をいじってみるね。
foreach (@log){
$_ =~ s/\([\w\.-]\)\n$//;
print "$_<hr>\n";
}
でも、このままだと穴があるよ。
行数が入らないから次回にまわすね。
0433月宮あゆ ◆XalkKQX1is
03/01/08 20:50ID:???再取得したらなおったよ
ありがとう
>>426
ありがとう、うれしいよ
>>427
ど、どうしたの?
>>429
ありがとう。
>>429-430
やりたいことがよくわからないよ
ボクの名前の人がいっぱいいて、
みんながいろいろ教えられるスレッドにしていく、ってこと?
0434月宮あゆ ◆XalkKQX1is
03/01/08 20:51ID:???うーん・・・
できればsplitあたりを使って今回やりたかったんだけど
行数が入らないからフォーマットは次回まわしかな
0435429(みんなごめんよぅ)
03/01/09 13:52ID:???重要な語句が抜けてますた(*´Д`)
質問に「答える人達が」共有であゆコテを使おうってことを言いたかったんだ。
「◆XalkKQX1is」あゆ一人だけだと、負担がかかるんじゃないかと思ったから。
気の回しすぎだったらごめん。
軽い気持ちで吊ってくるっす。
0436nobodyさん
03/01/10 16:37ID:???0437nobodyさん
03/01/11 02:57ID:???それなら、AYUAYUっていうトリップ探して付けてみたら?
そっちの方が雰囲気出るかも
ただ、◆Xalk..も◆AYUAYU..も掲示板でpassを晒したら、
関係ない奴が偽物として入ってくると言う痛い罠
passの配布方法はどうするの?
0438nobodyさん
03/01/11 10:37ID:???0439nobodyさん
03/01/11 11:29ID:???0440437 ◆AYUwmuUytk
03/01/11 13:11ID:???自分ダメダメっすね(^.^;
0441月宮あゆ
03/01/11 21:02ID:???〃┏━━ 、
パタパタ | ノノソハ))) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(((\リリ ´ー` リ < うぐぅ♪
((ニE/⌒ヾ∞"ヽ \____________
(こ) ∞ |こ)
く__∞,ノ
し' し'
0443nobodyさん
03/01/15 12:49ID:???0444山崎渉
03/01/15 13:35ID:???0445西野つかさ
03/01/15 18:27ID:NGnYg/Kg0446nobodyさん
03/01/15 20:08ID:BpytE0q00447ひろゆき
03/01/15 20:58ID:XI5HMpQjいまどき(仕事以外で)使ってる人いるんすかねえ、、、
0448nobodyさん
03/01/15 21:16ID:???電2>基礎から丁寧に説明してくれるので非常に分かりやすい
0449nobodyさん
03/01/15 22:14ID:???0450nobodyさん
03/01/16 00:04ID:juXMvCeg0451nobodyさん
03/01/16 03:29ID:???降臨きぼーん
0452nobodyさん
03/01/16 09:44ID:???電2ってなによ
0454210.159.255.255
03/01/16 16:35ID:iMxUcVql0455nobodyさん
03/01/16 17:26ID:???0456nobodyさん
03/01/16 19:04ID:xD66X4/70457nobodyさん
03/01/16 19:13ID:???0458月宮あゆ ◆XalkKQX1is
03/01/16 22:07ID:???|. ノノソハ)))
(\リリ ´ー`)リ < ログファイル (1)
(ニE(#つo⊂#)
前回はホストの記録をやってみたわけだけど、実は拡張子が、
.cgi とかじゃないファイルは、外部から参照されちゃうことがあるんだ
(でも、基本的にサーバーの設定に依存するよ)
log.cgi か何かにリネーム(名前を変更)して、スクリプトも少し
書き直したらこの問題は解決されるね。
じゃあ今回は、少し重い掲示板を作る、っていう想定でやってみるね。
ここでは表示欄にテーブルを組ませたりするよ。
ちょっとここで考えてみると、前回までと同じように、ログファイルに
書き込んでると、容量がどんどん大きくなっちゃうよね。
それは困る、っていうことで、一般的な掲示板では、【区切り文字】を
使って、名前、とかの要素を区切って保存してるよ。
2ちゃんねるでもこれは同じだよ。
http://pc.2ch.net/php/dat/1014096840.dat
名前<>E-mail<>投稿日<>本文<>(サブジェクト)
っていう感じに <> で区切られて保存されてるのがわかると思うよ。
区切り文字は、 <> が一番メジャーで、次に , とか : とか | を見るね。
別に何でもいいんだけどね。でも、本文にその区切り文字があると、
そこで区切られちゃうから、それを避けるようにすればいいね。
じゃあ、今回は
名前<>E-mail<>投稿日<>本文<>ホスト
っていう形式でやってみることにするね。
0459月宮あゆ ◆XalkKQX1is
03/01/16 22:14ID:???うーん・・
ボクは別にそれでもいいけど
結構大変な仕事を継続してやってくれる人はいるかな…?
いるならボクは大歓迎だよ
>>437 >>442
トリップのキーはすぐに割れそうな気がするキーなんだけど…
えっと、他のスレでもこのトリップ使ってるから、
公開するつもりはあまりないよ、ごめんね
>>447
COBOL…?
ごめん、聞いたことないよ。。
>>448-449
えっ?!
今みてみたけどホントに掲載されてるね
うれしいよ、今度からも頑張るから応援してね
>>448
そんな難しいこと書いてるかなぁ…
どのへんから分からないのか教えてほしいな
>>451
遅くなってごめんね
>>457
スレ違いだよっ!
0460nobodyさん
03/01/17 00:02ID:???あゆあゆ降臨
キタ─wwヘ√レvv~(゚∀゚)─wwヘ√レvv~─ !!!
俺はスローペースでもOK
てか、あゆあゆは一人であとは普通に教えあえばいいと思うよ。
0461nobodyさん
03/01/17 00:31ID:???0462nobodyさん
03/01/17 01:33ID:???〃┏━━
( ) ( )
(.〆⌒ヽ )
(∴゚ρ゚∴) < いないよ>>461
( £ £ )
( £ゑ££ )
(££ゑ£)
|. ノノソハ)))
(\リリ ´ー`)リ
(ニE(#つo⊂#)
■ このスレッドは過去ログ倉庫に格納されています