月宮あゆのPerl教室 Part.4
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001月宮あゆ
02/02/19 14:34ID:???〃┏━━ 、
パタパタ | ノノソハ))) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(((\リリ ´ー` リ < うぐぅ♪
((ニE/⌒ヾ∞"ヽ \____________
(こ) ∞ |こ)
く__∞,ノ
し' し'
0899nobodyさん
03/03/19 15:28ID:???0900nobodyさん
03/03/19 15:28ID:???my %param = @_;
#何か
return ...;
}
0901nobodyさん
03/03/19 15:28ID:???( ´,_ゝ`) プッ $x= 'A'でも1足すのかよ
$x= 'A';
$x++;
print $x; # これはB
$x= '?';
$x++;
print $x; # これは1
よく頭に叩き込んでおけ
0902nobodyさん
03/03/19 15:28ID:???^ =>最初
$ =>最後
文字
. =文字
[..] =>文字クラス。括弧の中の、任意の1文字
[^..] =>中身以外の文字を1つ
繰り返し
* =以上
+ =以上
{n} =>n回
{n,m} =>n以上m未満
{n,}、{,m} も可能
(?:...) =>まとめるだけでいいとき
(...) =>後から$1とかで使うとき
\1 \2 \3 =>パターンマッチの中で使える。
$1 $2 $3 =>外で使う
0903nobodyさん
03/03/19 15:28ID:???確かに、これだけじゃちょっと・・・
変数のスコープとか、GC,
サブルーチン内でグローバル変数を変更する事のリスクとか。
後できちんとフォローすれば大丈夫。多分。。。
0904nobodyさん
03/03/19 15:28ID:???綾波レイのWEB制作管理教えますれ
http://pc3.2ch.net/test/read.cgi/hp/1023741627/l50
0905nobodyさん
03/03/19 15:29ID:???use strictなんてきらいだよー。
0906nobodyさん
03/03/19 15:29ID:???0907nobodyさん
03/03/19 15:29ID:???0908nobodyさん
03/03/19 15:29ID:???|. ノノソハ)))
(\リリ ´ー`)リ < サブルーチン (2) 返り値
(ニE(#つo⊂#)
サブルーチンでは、返り値 (かえりち) っていうものが作れるよ。
「返り血」とか変なこと言ったら嫌だよ。
$x = &xxx; # $x には abc が代入されるよ。
sub xxx{ return "abc"; }
return ●
…●を返り値として、呼び出し元に戻る。
ちょっとここで注意だけど、この関数は、絶対にサブルーチンの外で
使っちゃだめなんだ。戻る場所がないからね。
ふたつ以上の返り値を送りたいなら、
return ( $a, $b, $c );
みたいに配列にして送るといいよ。
受け取るときは、
( $a, $b, $c ) = &xxx;
こうやって受け取ることができるよ。
それか、配列をあらかじめ作っておいて、
return @xxx;
@xxx = &xxx;
みたいなこともできるよ。
0909nobodyさん
03/03/19 15:29ID:???サブルーチン、はとりあえず (4) か (5) まで続くと思うよ。
今は (4) の途中まで書いてるからね。。
確かに、オートインクリメント演算子は、「1足す」じゃなくて、
「値を1増加させる」っていう機能なのはその通りなんだけど、
そんな扱ってないようなことを勝手に進めないで。
先に「省略してるところもある」ってちゃんと言ってるんだから。
そんなことはあまり知る必要ないんじゃない?
必要最小限のことは付け足すからね。
ボクはPHPはほとんどできないんだよね。。
勉強するにもPHPの入門書が数ないからねえ。。
0910nobodyさん
03/03/19 15:30ID:???0911nobodyさん
03/03/19 15:30ID:???標準ライブラリの中にもその使い方をしているものもあるよ。
ところで、-wスイッチとuse strictの説明の予定はあるの?
コーディングを楽にするためにも、まずその説明をした方が良いと思うね。
同じ意味だと思うよ。
0912nobodyさん
03/03/19 15:30ID:???よかった、前から気になっていたんだ。
0913nobodyさん
03/03/19 15:30ID:???0914nobodyさん
03/03/19 15:30ID:???0915nobodyさん
03/03/19 15:30ID:???foreach
これってフォーイーチ?
フォーリーチですか?
気になって仕方ないです…
お願いします。
0916nobodyさん
03/03/19 15:30ID:???0917nobodyさん
03/03/19 15:31ID:???0918nobodyさん
03/03/19 15:31ID:???0919nobodyさん
03/03/19 15:31ID:???|. ノノソハ)))
(\リリ ´ー`)リ < サブルーチン (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"; }
0920nobodyさん
03/03/19 15:31ID:???eval の中かな?
eval はまだ取り扱ってないから、出てきたときに説明しようと思って、
こんなところで「eval」って出したら混乱する人もいそうだから、
あえて説明しなかったんだよね。。
-w とか strict は、知っておいた方がいいことだろうね。。
-w は未定だけど、 strict はそのうち勉強する予定だよ。
ふぉーいーち、だと思うよ
0921nobodyさん
03/03/19 15:31ID:???このあゆ、汗っかきだなあ
このあゆ、ワキガ??
0922nobodyさん
03/03/19 15:31ID:???〃┏━━ 、
パタパタ | ノノソハ))) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
(((\リリ *´ー゚*リ < うぐぅ♪
((ニE/⌒ヾ∞"ヽ \____________
(こ) ∞ |こ)
く__∞,ノ
し' し'
0923nobodyさん
03/03/19 15:31ID:???| う う |
| ぐ う / ̄ ̄ ̄ ̄ ̄ ̄
| ウ | < うげぇ
\__/ \______
. r‐-i^i´`||iii》ヽ
(_| | i/二フ.〉
(__|_ゝ、__[]_ア
/ l| |
/fヨI 中|
く l| |
` ‐r-十!
ノ ! !
/ゝ,/ー|
/ /l |
/ f《 |fヨ |
. \_)_ノ
0924nobodyさん
03/03/19 15:32ID:???0925nobodyさん
03/03/19 15:32ID:???実はrequireされるライブラリファイルの中だとreturn出来るんだよ。
例えばAnyDBM_Fileがそうしてる。
ま、普通は使わない機能だけどね。
0926nobodyさん
03/03/19 15:32ID:???subroutine, eval, do FILE ... みたいですね。
ライブラリの中って言うのは、よくモジュール等の最後に 1; ってやるけど
あれって、return が省略されていたんだ?
そういえば、sub 内でも定数とかを返すだけのサブルーチンでは
return省略してるの良く見かけるよなぁ
0927nobodyさん
03/03/19 15:32ID:???ちょっと違う。
returnがない場合、最後に評価された式の結果が返される。
1; というのは式1;の値は1だから1が返る。
…って動作のはず。
0928nobodyさん
03/03/19 15:32ID:???0929nobodyさん
03/03/19 15:33ID:???0930nobodyさん
03/03/19 15:33ID:???0931nobodyさん
03/03/19 15:33ID:???睾丸無知
0932nobodyさん
03/03/19 15:33ID:???0933nobodyさん
03/03/19 15:33ID:???0934nobodyさん
03/03/19 15:33ID:???0935nobodyさん
03/03/19 15:33ID:???0936nobodyさん
03/03/19 15:33ID:???|. ノノソハ)))
(\リリ ´ー`)リ < サブルーチン (4) 引数
(ニE(#つo⊂#)
引数、っていうのは、「ひきすう」って読むらしいよ。
ボクはこのあいだまで、「いんすう」だって思ってたんだけど。。
サブルーチンから値を持って戻る、っていうことをやったね。
じゃあ次は、値を持ってサブルーチンを実行するっていうことをやるね。
&xxx("abc", "123", "あいう");
こんな風に呼び出すと、特殊配列 @_ に頭から代入されて呼び出されるよ。
当然、
@list = ("abc", "123", "あいう");
&xxx(@list);
と同義だよ。
この辺の話を覚えて、次回は、名無しさんならエラー、っていう
ソースに改造してみるよ。
#投稿が遅れてごめんね。
#遅れてもdat落ちや削除されない限り途中で放棄することはないからね。。
0937nobodyさん
03/03/19 15:34ID:???知らなかった
ちょっと恥ずかしいな
えっ
そんなにあるのっ?!
なんだかすごいね
Perl、ってクラスって言うのかな…?
呼び方とかよく知らないや。。
遅れてごめんね。
0938nobodyさん
03/03/19 15:34ID:???0939nobodyさん
03/03/19 15:34ID:???月宮あゆのPHP教室きぼんぬ
0940nobodyさん
03/03/19 15:34ID:???で、PHPの勉強にすることにしたので、
おれもPHP教室を希望します。
ちょっとづつでいいのでお願いしたいです。
0941nobodyさん
03/03/19 15:34ID:???0942nobodyさん
03/03/19 15:34ID:???でも、月宮あゆ君はよくがんばってると思うよ。
今後もがんばってもらいたいね。Perlで移行!!。
0943nobodyさん
03/03/19 15:35ID:???いや、なにか役立つでしょ。うん。
それとも先にcかphpを勉強した方が良いのか・・・?
0944nobodyさん
03/03/19 15:35ID:???Perlは勉強していきます。役には立ちますよね。
次にPHP、そしてCという順にやっていきます。がんがります。
0945nobodyさん
03/03/19 15:36ID:???でも、最終的にCするんだったら、ぼくはPHPを強く勧めるよ。
Perlから始めちゃうとPerl独自の癖がつくのでPerlしかできなくなる危険性があるので、
PHP勉強した後、Perlを勉強したほうかいいかもしれないね♪ がんがれ!
0946nobodyさん
03/03/19 15:36ID:???|. ノノソハ)))
(\リリ ´ー`)リ < エラー画面を作る
(ニE(#つo⊂#)
じゃあ、まずはソースだよ。
ttp://www.geocities.co.jp/SiliconValley-Sunnyvale/8274/perl/perl0007.txt
&error("エラーメッセージ");
としてサブルーチンを呼びだすと、
( 特殊配列 @_ の0番目の要素だから $_[0] )
エラーメッセージが $_[0] に入って参照するようになってるよ。
こういうエラーのサブルーチンはよく見かけるね。
ぜひ使えるようにしようね。
次回は、環境変数について勉強するね。
0947nobodyさん
03/03/19 15:36ID:???ボクも今、PHPは勉強してるところなんだよね
ちょっとボクにはできそうにないよ
ごめんね
確かにこれからはPHPの時代に変わっていくかもしれないね。
elsif 、とかPerl以外にみたことないよ。。
0948nobodyさん
03/03/19 15:36ID:???0949nobodyさん
03/03/19 15:36ID:???PHP では、 elseif, else if
Perl で、無理に独自のスタイルに馴染まなくても
C ライクなプログラミングも出来るよ。
0950nobodyさん
03/03/19 15:36ID:???0951nobodyさん
03/03/19 15:37ID:???あゆタン
0952nobodyさん
03/03/19 15:37ID:???IEを恨みましょう。
0953nobodyさん
03/03/19 15:37ID:???>C ライクなプログラミングも出来るよ。
独自スタイルを使わずしてPerlは動くのか?
C知らずしてCライクは無理だろ。もうちと考えてかけよ。
0954nobodyさん
03/03/19 15:37ID:???0955nobodyさん
03/03/19 15:37ID:???0956nobodyさん
03/03/19 15:37ID:???0957nobodyさん
03/03/19 15:38ID:???0958nobodyさん
03/03/19 15:38ID:???0959nobodyさん
03/03/19 15:38ID:???0960nobodyさん
03/03/19 15:38ID:???|. ノノソハ)))
(\リリ ´ー`)リ < 環境変数 (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} : そのページへのリンク元アドレスが入ってるよ。
こんな感じかな。
次回は他の環境変数と、スペースがあまったら実用例を書いてみるね。
0961nobodyさん
03/03/19 15:38ID:???無料サーバかな?
規約違反するなら infoseek かトクトク
規約違反しないなら XREA がいいと思うな
Python なんて言語聞いたことない…
他は聞いたことあるけど。。
ボクもよくわからなかったんだけど410さんが言うにはIEの仕様みたいだね・・・
これはしかたないね
今は、あけましておめでとう、っていう時期になっちゃったね
ごめんね
見てくれてたのかな、ありがとうね
これからできるだけ顔を出したいと思ってるんだけどね
最近いそがしくて・・
0962nobodyさん
03/03/19 15:38ID:???0963nobodyさん
03/03/19 15:39ID:???0964nobodyさん
03/03/19 15:39ID:???|. ノノソハ)))
(\リリ ´ー`)リ
(ニE(#つo⊂#)
0965nobodyさん
03/03/19 15:39ID:???|. ノノソハ)))
(\リリ ´ー`)リ < 環境変数 (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 関数も使えないサーバーもあるらしいよ。。
こんなサーバーは(たぶん)どうやってもホスト名は取得できないよ。
わからないことがあったら、サーバーの管理人さんに聞いてね。
0966nobodyさん
03/03/19 15:39ID:???ん?なに?
Janeで読んだら「ここ壊れてます」、って言われる
なんでだろう
0967nobodyさん
03/03/19 15:39ID:???0968nobodyさん
03/03/19 15:39ID:???0969nobodyさん
03/03/19 15:40ID:???0970nobodyさん
03/03/19 15:40ID:???0971nobodyさん
03/03/19 15:40ID:???おめでと〜。
関係ないけど、
このスレでの「月宮あゆ」は共有コテにして、トリップだけ別々にすればいいと思うが。
俺は「C言語CGI」スレの住民だけど、あゆのレスが面白くてこっちにもいてみたり。
0972nobodyさん
03/03/19 15:40ID:???を提唱しようではないか。と。
取りあえず次スレはWebProg総合スレにして欲しいっす。
初心者スレとかも良いかもね。
0973nobodyさん
03/03/19 15:40ID:???|. ノノソハ)))
(\リリ ´ー`)リ < 環境変数 (3)
(ニE(#つo⊂#)
じゃあ、掲示板に書きこんだ人のホストを記録するよ。
簡単に言うと、ログファイルに記録すればいいんだけど、
ログファイルにそのまま記録しちゃうと、読む人にホストが見えちゃうんだよね。
たぶんここにいる人たちはホスト開示、っていうのは嫌だと思うんだ。
コメントにする、っていうのも、ソースを見られたらばれちゃうよね。
じゃあ、こんなことをしてみよう。
書きこむときに
<a href='mailto:メール'>名前</a>>メッセージ
っていう書き方をやめるんだ。こうじゃないとホストが筒抜けになっちゃうからね。
じゃあ、ホストを記録できるようにするには、
<a href='mailto:メール'>名前</a>>メッセージ(ホスト)
みたいにして、表示するときに消してやるといいよ。
表示する欄をいじってみるね。
foreach (@log){
$_ =~ s/\([\w\.-]\)\n$//;
print "$_<hr>\n";
}
でも、このままだと穴があるよ。
行数が入らないから次回にまわすね。
0974nobodyさん
03/03/19 15:40ID:???0975nobodyさん
03/03/19 15:41ID:???できればsplitあたりを使って今回やりたかったんだけど
行数が入らないからフォーマットは次回まわしかな
0976nobodyさん
03/03/19 15:41ID:???重要な語句が抜けてますた(*´Д`)
質問に「答える人達が」共有であゆコテを使おうってことを言いたかったんだ。
「◆XalkKQX1is」あゆ一人だけだと、負担がかかるんじゃないかと思ったから。
気の回しすぎだったらごめん。
軽い気持ちで吊ってくるっす。
0977nobodyさん
03/03/19 15:41ID:???0978nobodyさん
03/03/19 15:41ID:???そっちの方が雰囲気出るかも
ただ、◆Xalk..も◆AYUAYU..も掲示板でpassを晒したら、
関係ない奴が偽物として入ってくると言う痛い罠
passの配布方法はどうするの?
0979nobodyさん
03/03/19 15:42ID:???0980nobodyさん
03/03/19 15:42ID:???0981nobodyさん
03/03/19 15:42ID:???自分ダメダメっすね(^.^;
0982nobodyさん
03/03/19 15:42ID:???いっそトリップ付けなきゃ(ry
もしくはID表示させれば(ry
0983nobodyさん
03/03/19 15:43ID:???0984nobodyさん
03/03/19 15:43ID:???0985nobodyさん
03/03/19 15:43ID:???0986nobodyさん
03/03/19 15:43ID:???0987nobodyさん
03/03/19 15:43ID:???いまどき(仕事以外で)使ってる人いるんすかねえ、、、
0988nobodyさん
03/03/19 15:43ID:???電2>基礎から丁寧に説明してくれるので非常に分かりやすい
0989nobodyさん
03/03/19 15:44ID:???降臨きぼーん
0990nobodyさん
03/03/19 15:44ID:???電2ってなによ
0991nobodyさん
03/03/19 15:44ID:???0992nobodyさん
03/03/19 15:45ID:???0993nobodyさん
03/03/19 15:45ID:???0994nobodyさん
03/03/19 15:45ID:???|. ノノソハ)))
(\リリ ´ー`)リ < ログファイル (1)
(ニE(#つo⊂#)
前回はホストの記録をやってみたわけだけど、実は拡張子が、
.cgi とかじゃないファイルは、外部から参照されちゃうことがあるんだ
(でも、基本的にサーバーの設定に依存するよ)
log.cgi か何かにリネーム(名前を変更)して、スクリプトも少し
書き直したらこの問題は解決されるね。
じゃあ今回は、少し重い掲示板を作る、っていう想定でやってみるね。
ここでは表示欄にテーブルを組ませたりするよ。
ちょっとここで考えてみると、前回までと同じように、ログファイルに
書き込んでると、容量がどんどん大きくなっちゃうよね。
それは困る、っていうことで、一般的な掲示板では、【区切り文字】を
使って、名前、とかの要素を区切って保存してるよ。
2ちゃんねるでもこれは同じだよ。
http://pc.2ch.net/php/dat/1014096840.dat
名前<>E-mail<>投稿日<>本文<>(サブジェクト)
っていう感じに <> で区切られて保存されてるのがわかると思うよ。
区切り文字は、 <> が一番メジャーで、次に , とか : とか | を見るね。
別に何でもいいんだけどね。でも、本文にその区切り文字があると、
そこで区切られちゃうから、それを避けるようにすればいいね。
じゃあ、今回は
名前<>E-mail<>投稿日<>本文<>ホスト
っていう形式でやってみることにするね。
0995nobodyさん
03/03/19 15:45ID:???ボクは別にそれでもいいけど
結構大変な仕事を継続してやってくれる人はいるかな…?
いるならボクは大歓迎だよ
トリップのキーはすぐに割れそうな気がするキーなんだけど…
えっと、他のスレでもこのトリップ使ってるから、
公開するつもりはあまりないよ、ごめんね
COBOL…?
ごめん、聞いたことないよ。。
えっ?!
今みてみたけどホントに掲載されてるね
うれしいよ、今度からも頑張るから応援してね
そんな難しいこと書いてるかなぁ…
どのへんから分からないのか教えてほしいな
遅くなってごめんね
スレ違いだよっ!
0996nobodyさん
03/03/19 15:46ID:???キタ─wwヘ√レvv~(゚∀゚)─wwヘ√レvv~─ !!!
俺はスローペースでもOK
てか、あゆあゆは一人であとは普通に教えあえばいいと思うよ。
0997nobodyさん
03/03/19 15:46ID:???0998nobodyさん
03/03/19 15:46ID:???〃┏━━
( ) ( )
(.〆⌒ヽ )
(∴゚ρ゚∴) < いないよ ( £ £ )
( £ゑ££ )
(££ゑ£)
|. ノノソハ)))
(\リリ ´ー`)リ
(ニE(#つo⊂#)
レス数が950を超えています。1000を超えると書き込みができなくなります。