トップページ⇒php
1001コメント377KB

月宮あゆのPerl教室 Part.4

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001月宮あゆ02/02/19 14:34ID:???
      _ _
     〃┏━━ 、
パタパタ |  ノノソハ)))  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (((\リリ ´ー` リ <  うぐぅ♪
  ((ニE/⌒ヾ∞"ヽ   \____________
    (こ)   ∞ |こ)
    く__∞,ノ
    し' し'
0802nobodyさん03/03/19 15:12ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < 正規表現 (2)
 (ニE(#つo⊂#)

今回は、文字クラス [ ] について詳しく勉強するよ。

[ ] の中に文字を書くと、正規表現では [ ] の中の、
どれか1文字にマッチするんだったね。

じゃあ、特殊な書き方も含めて説明するね。
[A-Z] は、 A から Z までのどれか1文字だね。
[A-Za-z] なら、大文字か小文字だよ。
[^0-9] [ ] の先頭に ^ があると、【ここにない1文字】
って、意味が逆転するよ。

if ( $xxx =~ /[ABCDE]/ ) { print "ABCDE のどれかが含まれる"; }
if ( $xxx =~ /[abcde]/ ) { print "abcde のどれかが含まれる"; }
if ( $xxx =~ /[A-Z]/ ) { print "ABC…XYZ のどれかが含まれる"; }
if ( $xxx =~ /[0-9]/ ) { print "0123456789 のどれかが含まれる"; }
if ( $xxx =~ /[A-Z]$/ ) { print "アルファベット大文字で終わる"; }
if ( $xxx =~ /[A-Z]+/ ) { print "アルファベット大文字が1回以上繰り返し"; }
if ( $xxx =~ /^[A-Z]+$/ ) { print "アルファベット大文字しかない変数"; }
if ( $xxx =~ /[^A-Z]/ ) { print "アルファベット大文字以外の文字が含まれている"; }

次回は、 ( ) と後方参照について説明するね。

#間違いがあったら指摘してね…
0803nobodyさん03/03/19 15:12ID:???
まだなんとかわかるよ。
0804nobodyさん03/03/19 15:13ID:???
今のペースでいくとオブジェクトな話になるのは何年後だろう^^;
0805nobodyさん03/03/19 15:13ID:???
まあ後は自分で勉強すれば良いだけの話だし、いいのでは?
途中で挫折した香具師多いと思われるから、マターリ進行で…
0806nobodyさん03/03/19 15:13ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < 正規表現 (3)
 (ニE(#つo⊂#)

今回は、後方参照に使う、 ( ) について詳しく説明するね。

( ) の中に文字を書くと、【 ( ) の中でマッチした部分をあとで参照できる】んだ。
正規表現は、 [ ] を使うと、マッチするパターンがたくさん考えられるよね。
マッチした部分をあとから参照するのに使うよ。

パターンの中では、 ( ) でくくった順に、\1 、 \2 、 \3 …って参照できるよ。
パターンの外で参照するなら、 $1 、 $2 、 $3 …で参照するんだ。
パターンの外で参照する方がよく使うと思うから、
こっちはしっかり使い方を理解しておいてね。

じゃあたくさん例文を見て、使い方を覚えてね。

if ( $xxx =~ /([ABCDE])/ ) { print "マッチ:$1"; }
if ( $xxx =~ /([abcde])\1/ ) { print "abcde のどれかが2回以上続く"; }
if ( $xxx =~ /([0-9]+)-([0-9]+)/ ) { print "マッチ:$1-$2"; }

次回は、 [ ] を簡略化できる感じの、メタ文字と、
スペースがあまったら正規表現演算子をみてみようね。

今回はちょっと短いけどこれで終わりだよ。
0807nobodyさん03/03/19 15:13ID:???
うん、それならよかった

結構かかりそうだよね…
そんなに難しい話になるまで続くのかな…?

うん、そうだね
まあ実用的なスクリプト作れるぐらいになったら終了、かな
0808nobodyさん03/03/19 15:13ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < 正規表現 (4)
 (ニE(#つo⊂#)

今回は、メタ文字について説明するよ。

パターンの中では、 [ ] で囲む、よく使いそうなものを、
メタ文字っていうので使えるんだ。

\d … 数字を表すよ。 [0-9] と同じだね。
\D … 数字以外を表すよ。 [^0-9] と同じ。
\w … [A-Za-z0-9_] と同じ。単語構成文字、って言うみたいだね。
\W … [^A-Za-z0-9_] と同じ。

他にもあるけど、とりあえずこれだけ覚えてたらボクの経験上問題ないね。

じゃあ、演算子について説明するね。

正規表現(1) でも少し触れたけど、
● =~ /◆/★
この、★の部分だったね。
じゃあ、簡単に説明するね。

何種類かあるんだけど、 i だけ知っておけば十分だよ。

i をつけることによって、大文字小文字の区別をしないことができるんだ。

if ( $xxx =~ /abc/i ) { print "大文字小文字を区別せずにabcが含まれる"; }

他の関数も入ってくると、 e とか g とかもあるけど、それはそのとき説明するね。
0809nobodyさん03/03/19 15:13ID:???
一行抜けちゃった…

「これでとりあえず、正規表現は終わりだよ、次回は配列操作をやるね。」
0810nobodyさん03/03/19 15:14ID:???
>>あゆ

ほぼ、一日に1レクチャか、まめだね。尊敬するよ。
下手な日記書いてる奴よっかスゲーなおまい
0811nobodyさん03/03/19 15:14ID:???
       |こたつから出られなくなる季節です
   ∧ ∧ |/\_________                   
   (,,゚Д゚)____.
   (つ/~ ※ ※ \
   /※ ※ ※ ※ \

0812nobodyさん03/03/19 15:14ID:???
片付けないと炬燵出せません(T-T)
0813nobodyさん03/03/19 15:14ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < 配列操作
 (ニE(#つo⊂#)

配列操作関数だよ。
よく使うからしっかり覚えてね。

unshift ★, ◆
 … 配列★の先頭に要素◆を追加する

shift ★
 … 配列★の先頭の要素を削除する

push ★, ◆
 … 配列★の末尾に要素◆を追加する

pop ★
 … 配列★の末尾の要素を削除する

このよっつだよ。じゃあ例をみてみるね。

@xxx = ("a", "b", "c");
@yyy = ("x", "y", "z");

push @xxx, "d"; # 末尾に d を追加 … a, b, c, d になる
push @xxx, @yyy; # a, b, c, d, x, y, z
pop @xxx; # a, b, c, d, x, y
shift @xxx; # b, c, d, x, y
unshift @xxx, "a" # a, b, c, d, x, y

次回は、ファイル入出力とファイルハンドルについて説明するね。
0814nobodyさん03/03/19 15:14ID:???
うん、ありがとう
途中でいきなり終わり、なんてことにならないようにがんばるよ

うん、そうだね
これからどんどん寒くなっていくからね
ボクもこの前こたつ出したよ

香里さんの家ってそんなに散らかってるの…
片づけてあとで温かいこたつに入るときもちいいよ
0815nobodyさん03/03/19 15:14ID:???
冬でもアイス美味しいですよ
0816nobodyさん03/03/19 15:15ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < ファイル入出力 (1)
 (ニE(#つo⊂#)

今回はファイルの読み書きとファイルハンドルについて説明するね。

・ファイルハンドル
ファイルハンドル、っていうのは、ファイルを開くときに、ファイルハンドル、
っていうものに結びつけて開くんだ。ファイルに書くときも同じだよ。
これにファイルを結びつけてを作るには、 open っていう関数が一番一般的だね。
ファイルハンドルは、半角大文字でつけるのが原則だよ。
ファイルハンドルを使い終わったら、 close 関数で閉じるようにしようね。

open ★, ◆
close ★

★ … ファイルハンドル (半角大文字ならなんでもいいよ)
◆ … ファイル名
ファイル◆をファイルハンドル★に結びつけて開くよ。

じゃあ、 "test.txt" の内容を $test にいれて、表示するサンプルを書いてみるね。

open IN, "test.txt";
$test = <IN>; # こうやってファイルハンドルを変数に代入する
close IN;

print "$test";

Perl の勉強熱心な人は、実際試してみるてね。
今回のプログラムは、いろいろやっていると何か気付くことがあるはずだから、
必ず試しに動かしてみてね。 test.txt の中を書きかえながら。
0817nobodyさん03/03/19 15:15ID:???
ボ、ボクはいいよ、遠慮しとく
0818nobodyさん03/03/19 15:15ID:???
ヲタとヲタの交流場はここですか?
0819nobodyさん03/03/19 15:15ID:???
タイヤキアイス食え。

ここに書き込んだ時点であなたも(以下略
ここの会話がヲタ会話とわかる時点であなたも(以下略
0820nobodyさん03/03/19 15:15ID:???
あゆたん、がんがれ。(うぐぅ
0821nobodyさん03/03/19 15:16ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < ファイル入出力 (2)
 (ニE(#つo⊂#)

前回のスクリプトはみんな動かしてみてくれたかな?
いろいろやってみると、最初の1行しか表示されないことに気付いてくれたと思うんだ。
詳しくはそれはもう少しあとでやるね。
今回はファイルに書き込む方法を説明するよ。

open ★, "> test.txt";

こんなふうに、 > をつけてファイルを開くと、書き込みモードになるんだよ。
このファイルに書き込むには、

print ★ "test";

みたいな感じにするよ。
じゃあ、簡単なカウンターを書いてみるね。

行数が入らないから続くよ
0822nobodyさん03/03/19 15:16ID:???
-[perl0004.cgi]-------------------------------------------------
#!/usr/local/bin/perl

print "Content-type: text/html;\n\n";

open IN, "log.txt";
$count = <IN>;
close IN;

$count ++;

open OUT "> log.txt";
print OUT "$count";
close OUT;

print "<body>$count</body>";

exit;
----------------------------------------------------------------

ちゃんと動かしてみてね。
今回はここで終わりだよ。
0823nobodyさん03/03/19 15:16ID:???
たい焼きアイス…
あるなら食べてみたいかも

うん、ありがとうね
0824nobodyさん03/03/19 15:16ID:???
たい焼きアイスはマジであるよ。
数年前CMやってたの覚えてるし、多分うちの近所のスーパーに行けばまだ売ってると思う。

たい焼きの形をした最中の中にあずきとバニラアイスが入ってまつ。
あずきのバニラアイスのハーモーニーがたまりませんです。

余談
自分暇つぶしに2chのTripFinderスレを読んで自分なりのプログラムを組んでみたです。
CPU負荷かかりまくり、でも任意のTrip探す手間を考えれば楽なもんかな?とか思いながら使ってます。
今度taiyakiって入ったIDを探したいです!
0825nobodyさん03/03/19 15:16ID:???
あ、ちょっとミスをみつけたから書くね。
恥ずかしい…

-[perl0004.cgi]-------------------------------------------------
#!/usr/local/bin/perl

print "Content-type: text/html;\n\n";

open IN, "log.txt";
$count = <IN>;
close IN;

$count ++;

open OUT, "> log.txt"; # , が抜けてたね、ごめんね
print OUT "$count";
close OUT;

print "<body>$count</body>";

exit;
----------------------------------------------------------------

そうなんだ、じゃあボクも近くのスーパーに行って探してみるよ
ありがとうね
0826nobodyさん03/03/19 15:16ID:???
この教室は解り易いよ〜。

楽しみに見てますです。

それとトリップ付けてみました、別に意味はないので・・・ただunyuなだけです。


コンビニでたいやきアイスは発見できませんでした・・・残念です。
0827nobodyさん03/03/19 15:16ID:???
今日も頑張ってね。
0828nobodyさん03/03/19 15:16ID:???
昨日の教室はなかったのか?
0829nobodyさん03/03/19 15:17ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < foreach
 (ニE(#つo⊂#)

今回は foreach ループを説明するよ。
先に勉強しようと思ってたことを忘れてたから、簡単に説明するね。
次回からはまたファイル入出力の話に戻るからね。

foreach っていうのは、配列のすべての要素に一定の処理ができるんだ。
配列の中を全部表示したりしたいときに使うよ。
まず、構文を書くね。

foreach ● ( ◆ ) { ★ }

◆ に、対象の配列を書くよ。配列の要素が順番に変数 ● に入っていって、
順々に ★ が実行されていくよ。

これだけじゃなんのことかわからなくても、例を見てみてね。
実行したときどうなるか?は、自分で試してみてね。

@xxx = ("a", "b", "c", "d", "e", "f", "g", "h", "i", "j");

foreach $x (@xxx){print "$x";}
foreach (@xxx){print "$_";} # ● を省略したら、省略の原則、 $_ に入るよ。

この話を応用して次回にもっていくから、絶対に使えるようにしておいてね。
0830nobodyさん03/03/19 15:17ID:???
わかりやすい…?
そう、かな…?
ありがとね

うん、頑張るよ

1日1つ頑張りたいけど、無理な日もあってごめんね
0831nobodyさん03/03/19 15:17ID:???
.txtで今までの授業全部保存してるよ!

すっごく楽しみに見てるよ、これからも頑張ってね。
0832nobodyさん03/03/19 15:17ID:???
私も楽しみにしているので、無理せず続けて下さいね。
0833nobodyさん03/03/19 15:17ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < ファイル入出力 (3)
 (ニE(#つo⊂#)

今回は複数行のファイルを読み込む方法を説明するね。

open IN, "test.txt";

# 1行だけ読み込む
$test = <IN>;

# 全行読み込む
@test = <IN>;

close IN;

こんな感じにすると、1行ずつが配列のひとつの要素になるよ。
じゃあ、このファイルの中身を表示するには、

foreach (@test){
print "$_<br>";
}

ってやると表示されるよ。
じゃあ次回は、ファイルの読み書きもわかったし、
ユーザーが何か入力したのを受け取って結果を表示する、
ってことを勉強してみようね。
0834nobodyさん03/03/19 15:17ID:???
ただの趣味の延長だから、変なところがあるかもしれないけど…
気に入ってくれてうれしいよ、ありがとうね。
0835nobodyさん03/03/19 15:18ID:???
※注意

最初にも言ったけど、ここの教室でやっていることは、
【わかりやすくするために多少強引な説明をしている】ところがあるよ。
基本なんだけど、【わかりにくいし使われもしないから省いている】ところも
たくさんあるよ。他のサイトとか見てると、戸惑うことも多いとおもうけど、
混同させないように注意してね。
0836nobodyさん03/03/19 15:18ID:???
そ〜なんだ、解りました!
0837nobodyさん03/03/19 15:18ID:???
すごいね

メルマガとか出してみたら?
0838nobodyさん03/03/19 15:18ID:???
うぐぅage
0839nobodyさん03/03/19 15:18ID:???
うぐぅ、あゆが帰ってきてる。まだ、このスレあったんだ。
0840nobodyさん03/03/19 15:18ID:???
まだやってんの?ヲタドモ
0841nobodyさん03/03/19 15:19ID:???
カエレ
0842nobodyさん03/03/19 15:19ID:???
妄想族
0843nobodyさん03/03/19 15:19ID:???
       ∬
(´・ω・)っ旦 <マターリ
0844nobodyさん03/03/19 15:19ID:???
  ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( ´∀`)< このスレきもい♪
 (     つ  \______
 (_○___)
0845nobodyさん03/03/19 15:19ID:???
煽りは放置の方向でマターリと
0846nobodyさん03/03/19 15:19ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < フォームデーターの受けとり
 (ニE(#つo⊂#)

今回はフォームデータを受けとってみるよ。
最初のうちは、 cgi-lib.pl を使ってやってみることにするね。
下のサイトから入手できるよ。
http://cgi-lib.berkeley.edu/

確認しておくけど、フォームデータ、っていうのは、
HTMLの <form> とか <input> とかで送るデータのことだよ。

require "cgi-lib.pl";
&ReadParse;

まず、 cgi-lib.pl っていう名前で、ダウンロードしたソースを、
C:\www\home\perl\ に保存してみてね。
CGIに送られたフォームデータはこれだけで取得できるんだ。
( cgi-lib.pl が同じディレクトリにある時だけだよ)

例えばこんなデーターが送られたとすると、

aaa=xxx&bbb=yyy&ccc=zzz

%in っていうハッシュにまとめて値がいれられるよ。
例えば、 aaa を参照したいなら、 $in{'aaa'} っていう感じで取得できるよ。

フォーム入力ができたら、CGIの世界はとっても広がるよ。
次回は、簡易掲示板を書いてみるね。

#投稿が遅れてごめんね
0847nobodyさん03/03/19 15:20ID:???
うんうん、よろしくね

それもいいかもね
わかりやすく書き直して、カリキュラムもしっかり組めたら出してみるかも

うん、乗っ取らせてもらったよ
WebProg板のスレはなかなか落ちないからね…

うんうん、マターリしようね
0848nobodyさん03/03/19 15:20ID:???
メールアドレス作ってみたよ
内容についての質問とか要望があったらメールしてくれてもいいよ

なるべく返信はしたいけど、忙しくて手が回らなかったりしたらごめんね。
0849nobodyさん03/03/19 15:20ID:???
いつもここ見ながら新しいアイディアを模索してるよ。

もう来ないのかと思ったけど、待ってて良かったよ。


メルマガいいね!
0850nobodyさん03/03/19 15:20ID:???
…よかった。荒らしを気にしてもう来てくれなくなるかと思った。
気に入らなければ放置してくれれば良いだけなのに…。
0851nobodyさん03/03/19 15:20ID:???
なるほど
こんな輩がいるからいつまでたってもcgi-lib.plを使う香具師が絶えないんだな
0852nobodyさん03/03/19 15:20ID:???
cgi-lib.plって何?
マジで使ったこと無いけど、何するもんなの?
てか必要なの?
0853nobodyさん03/03/19 15:20ID:???
jcode.plやらcgi-lib.plを使うスクリプトが国際網から絶えないので、
わざわざ鯖に入れている鬱、、、
0854nobodyさん03/03/19 15:21ID:???
あゆたん、サイトがあったんだね。
今まで知らなかったよ。(うぐぅ
0855nobodyさん03/03/19 15:21ID:???
-[perl0005.cgi]-------------------------------------------------
#!/usr/bin/perl/
# 簡易掲示板

print "Content-type: text/html;\n\n";

require "cgi-lib.pl"; &ReadParse;

print "<html>\n";
print "<head><title>掲示板</title></head>\n";
print "<body>\n";
print "<hr>\n";

if($in{message}){
open W, ">> perl0005.log";
print W "$in{message}\n";
close W;
}

open R, "perl0005.log";
@log = <R>;
close R;

foreach (@log){print "$_<hr>\n";}

print "<form action='perl0005.cgi'>\n";
print "<input type='text' name='message'> <input type='submit' value='書き込む'>\n";
print "</form>\n";
print "</body></html>\n";

exit;
----------------------------------------------------------------
0856nobodyさん03/03/19 15:21ID:???
↑注意
簡易掲示板のソースだよ。
同じフォルダに、 cgi-lib.pl をいれてね。

ボクは途中で放棄はあまりしたくないんだよね
来なくなることはないと思うよ

まあ最初の方はこうやって簡単にやってもいいんじゃないかな?
もうちょっと勉強してきたら、自分のスクリプトの中に書いていこうと思うよ。

フォームからデーターを送られてきたのを、CGI側で取得する機能があるよ。
他にもいくつか機能があるけど、代表的なのはこれだね。
0857nobodyさん03/03/19 15:21ID:???
今日うぐぅタンのページ見たよ、メアドの時に気づけなかった自分が寒いです・・・。


cgi-lib.plって便利そうだね。
もうちっと詳しく知りたいのでぐぐってきます。
0858nobodyさん03/03/19 15:21ID:???
ごめん、レスぬけてたね。。

うん。
ボクの名前でドメインとっちゃった。。

わぁ、ありがとう!
まあ、 cgi-lib.pl は便利なことは便利なんだけど、
ちょっと実行したときの効率があまりよくないんだよね。
また今度、 cgi-lib.pl なしで取得する方法を勉強するね。
0859nobodyさん03/03/19 15:21ID:???
うぐぅ。

今日タイヤキアイス食った、うまかった。
0860nobodyさん03/03/19 15:21ID:???
社団法人日本外交協会(外務省の外郭団体、会長/綿貫民輔衆議院議長)が10月に東京都払い下げの期限切れ間近の非常用備蓄食35万食を、都や政府に無断で北朝鮮に援助していたことが石原都知事のインタビューで暴露された。
この非常用備蓄食は保存性に優れたアルファ米を使っており、自衛隊も戦闘糧食として使用していることから軍事用に転用される恐れもある。
石原都知事はこの件に関して政府と国会に徹底的な調査を要求すると述べた。

「ニュース速報+」【国際】東京都の非常食が北朝鮮に、石原知事激怒2
http://news2.2ch.net/test/read.cgi/newsplus/1038560374/

ソース:石原都知事・11/29日記者会見─2:00あたりから
http://www.metro.tokyo.jp/GOVERNOR/KAIKEN/kako.htm
MXTVで22:30から再放送

社団法人日本外交協会
〒106-0041東京都港区麻布台3-1-2飯倉セントラルビル4F
0861nobodyさん03/03/19 15:22ID:???
うは、レスが早い! なんか嬉しい(うぐっ

自分はcgi-lib使わないで取得、エンコードずっとしてきたから・・・必要性は感じないんだけど知識としてね。


またページには遊びに行くよ!
なんか雰囲気とかもよかったし、勉強できそうなこととかもありそうな予感。



次回の授業を楽しみにしてます!
0862nobodyさん03/03/19 15:22ID:???
具体的にどう効率があまりよくない?
0863nobodyさん03/03/19 15:22ID:???
汎用的って事でしょう。
0864nobodyさん03/03/19 15:22ID:???
cgi-lib.plではなくCGI.pmを使え、という意味だったのだが。

0865nobodyさん03/03/19 15:22ID:???
CGI.pmって207k、、、。
そんなもん、コンパイルしてメモリにロードされるかとおもうと
とうてい、使う気にはなれんな。
0866nobodyさん03/03/19 15:22ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < 掲示板 (2)
 (ニE(#つo⊂#)

すっごく簡単に掲示板を書いてみたけど、どうだったかな?
やっぱり、機能が少なすぎるよね。
これからはしばらくの間、毎回少しずつ機能を足していく予定だよ。

今回の追加してみる機能は…
・名前欄を作るよ
・メール欄も作るよ
・名無しさんの名前が出るようにするよ

名前、メールは、入力欄を増やして、ログファイルに書き込むように
すれば、簡単にできちゃうよ。
名無しさんも簡単だね。

if(!$in{name}){
$in{name} = "名無しさん";
}

名前欄がなかったら「名無しさん」を代入してるね。

長くて入りきらなくなっちゃったね…
ここには重要な部分だけ書いて、全文はリンクからたどれるようにするね。
ソースはここだよ。
http://www.geocities.co.jp/SiliconValley-Sunnyvale/8274/perl/perl0006.txt

読めない、っていうときは、対象をファイルに保存、かソースを表示してみてね。

次回は、新しく置換演算子を勉強して、いろいろなことをやってみるね。
0867nobodyさん03/03/19 15:23ID:???
レスが早いのは運だよ

cgi-lib.pl は最初だから簡単に取得するために説明してるから、
慣れてきたら自分でやったほうがいいと思うよ

うん、ボクのホームページにも遊びに来てね。
ありがとう

317もあるけど、余計な処理をしすぎっていうか、
もっと簡単に短く単純に書けるよね
まあ自力でやる方法は今度説明するね。

cgi-lib.pl を使うのも CGI.pm もメリットがあればデメリットもあるよね
Perlを考えたアメリカの人は(名前忘れちゃったけど)
「Perlは好きなように書けばよい」っていう言葉を残してるんだから、
人それぞれやり方が違ってもいいと思うな
0868nobodyさん03/03/19 15:23ID:???
↑アメリカだったっけ…?
違ってたら恥ずかしいから、とりあえず発言撤回させて…
0869nobodyさん03/03/19 15:23ID:???
そっか〜、ありがと
鮎タンのページの掲示板でおみくじやったら「大凶」と「最大凶」ひいちゃったよ・・・。
これも運・・・。
0870nobodyさん03/03/19 15:23ID:???
TMTOWTDIはまさにその通り、それはいい。
だが今人に勧めるのなら既に保守更新されていないcgi-lib.plよりも
標準モジュールとして使えるCGI.pmの方が導入は容易だと思うのだが?

まあそれでもcgi-lib.pmが良いというのなら、ポリシーは人それぞれだからかまわないが。

滑稽だな。そう思うのならそもそもCGI/Perlを選択するのが間違い。
0871nobodyさん03/03/19 15:23ID:???
授業まだ〜?
0872nobodyさん03/03/19 15:23ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < 置換演算子
 (ニE(#つo⊂#)

前回のソースを一般公開してしまうと、JavaScriptを使ったブラクラとかも
簡単に書き込めるから、タグの < を、 < に、 > を > に
置き換える方法を勉強するね。

● =~ s/◆/★/g;

変数●に含まれる、◆を★に置き換えるよ。
◆は、変数などが使えて、正規表現で指定するよ。
★は、◆で ( ) があったら、通常の変数に加えて後方参照の $1 $2 .. が使えるよ。

じゃあ実際に例を書いてみるね。
わかると思うけど、ファイルに書き込むよりも前に処理を実行しないと意味がないよ。

$in{message} =~ s/</</g;
$in{message} =~ s/>/>/g;

じゃあ、ついでにURLの自動リンクの方法も書いておくね。

$in{message} =~ s/(http:\/\/[\w\/\.\?~&=@;#%-]+)/<a href="$1">$1<\/a>/g;

最後の、 g っていうのは、「あるだけ置き換えする」っていう意味だよ。
なんで自動リンク
正規表現のパターンの中で、 / が使いたいときは、
その前の文字に \ を使うといいよ。
print "<a href=\"http://xxx.yyy.zzz/\">ホームページ</a>";
こんな感じで print のなかに " を使いたいときも \" とするといいよ。
このへんのことは、これから先ずっと使うことになるから、必ず覚えるようにしようね。
0873nobodyさん03/03/19 15:24ID:???
うん
そういうこともあるよ

遅れちゃってごめんね
0874nobodyさん03/03/19 15:24ID:???
やっと正規表現まで来たね。
個人的にtrがすごく知りたいよ、まだいまいち理解してないんだよね。(恥
でも正規表現そのものが便利で難しいみたいだし、まだまだ勉強だね。

次回楽しみにしてます。返答ありがと。
0875nobodyさん03/03/19 15:24ID:???
でも「/」がたくさんあるといちいち「\/」に書き換えないとだから大変だよね。
ということで、じつは・・・

● =~ s#◆#★#g;

なんてのも使えるんだよ。
これなら「/」が多い日も安心ですね。

・・・っていうのは次回でつか?

「1文字ずつ対応させて置換する」って表現ではどうでしょう?>tr|y
$test = '01234-02468-13579-56789';
$test =~ tr/[0-9]/[A-J]/;
print $test; # ABCDE-ACEGI-BDFHJ-FGHIJ と表示
0876nobodyさん03/03/19 15:24ID:???
$test =~ tr/[0-9]/[A-J]/;
[]に意味はあるのかい?
0877nobodyさん03/03/19 15:24ID:???
$testに[]が含まれると、戻り値の置換文字数が変わってくる。
0878nobodyさん03/03/19 15:24ID:???
tr[0-9][A-B];
と書き変えておこうとして忘れてました。
スマ
0879nobodyさん03/03/19 15:25ID:???
これから先ずっと使う前に
q, qq, qw を覚えよーょ。

クォートのエスケープは他の言語でもよく使われるから、
覚えておいて損はないけど。
0880nobodyさん03/03/19 15:25ID:???
>pearさん
こんど♪のスクリプトも改良してほしいですぅ
0881nobodyさん03/03/19 15:25ID:???
ここにも出たか、粘着リア厨が!
さっさと糞してねれ!!
削除依頼出しとけよ!
0882nobodyさん03/03/19 15:25ID:???
=粘着
0883nobodyさん03/03/19 15:25ID:???
>>335=尾瀬原必死だな
まああんな穴だらけのクリプト晒されりゃいい恥さらしだから無理もないか(藁
0884nobodyさん03/03/19 15:25ID:???
正規表現のコンストラクタ、qr//も忘れずにな
0885nobodyさん03/03/19 15:26ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < 展開とクオート風演算子
 (ニE(#つo⊂#)

リクエストがあったから勉強するね。

$text = "うぐぅ";
print "うぐぅ<br>\n";
print "$text<br>\n";
print 'うぐぅ<br>\n';
print '$text<br>\n';

例えば、後々の説明を楽にするために、これを実行させてみてね。
'…' で囲むと、変数名がそのまま出ちゃったり、
ちゃんと改行されなかったりすることがわかると思うんだ。
'…' では、変数やメタ文字は【展開】されないよ。
つまり、囲った文字がそのまま出る、っていうことなんだ。
"…" では、【展開】されるよ。

さっきの例のソースを、全部、
"…" で囲んであるものは、 qq{…} に書き替えができるよ。(展開されるよ)
" が、ダブルクオーテーションっていう記号だから q がふたつあるのかな。
'…' で囲んであったら、 q{…} に書き換えができるよ。(展開されないよ)
こういうのを、クオート風演算子、っていうよ。
ボクは個人的な話だけど、 print は全部 qq{…} で書いてるよ。

続くよ。
0886nobodyさん03/03/19 15:26ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < クオート風演算子
 (ニE(#つo⊂#)

qw についても説明するね。
● = qw{★};
 ★で、半角スペースで区切った文字列を順番に配列●に代入するよ。
 これは知らなくてもそんなに影響はないと思うんだけどね…

qr は、取り扱うとしたらもう少し先になるかな…?
あといくつか、クオート風演算子はあるんだけど、代表的なものとしてこのへんで終わりにするね。

{ } って書いたけれど、一定の制約を守っていれば、 { } じゃなくてもできるよ。

一定の制約
 ・英数字以外の半角文字だったら何でもいいよ。
 ・ # を使うときは、直前にスペースがあると、コメントと間違うから注意だね
 ・カッコを使うときは、左右でペアにして使うよ。 { } ( ) [ ] < >

これは、正規表現の時にも使えるんだ。
たとえば、置換演算子の時では…

$test =~ s/xxx/yyy/g;
$test =~ s#xxx#xxx#g;
$test =~ s{xxx}{yyy}g;

これらは全部同じことを表しているよ。
それにしても、ボクはこの授業の内容は全部テキストファイルにしてるんだけど、
→ この行でちょうど1000行に達してしまうんだよね…。
ボク、よくこんなに書いたなあ…
0887nobodyさん03/03/19 15:26ID:???
さんが上手く説明してくれてるね。
ボクにはこれ以上うまく説明はできないかな

おんぷちゃんねるのスクリプト…?
改造すべきところなんてあるかな?
どう改造してほしいか言ってくれたら、
もしかしたら1%ぐらいの確立で改造してみるかも
あと、ここでは「あゆ」って呼んでくれた方がうれしいな
0888nobodyさん03/03/19 15:26ID:???
>342
ごめんなさいです。。。
用なし逝って話しますですぅ
0889nobodyさん03/03/19 15:26ID:???
さん
ありがと、そっか〜つまり抜けてる部分とか余ったりするとよくないっぽいんだね。
一つずつってのがポイントみたい。
これでtrは解ったよ、ホントありがと。

うぐぅタン
だんだん難しくなってきたよ・・・。
まだ何とか付いていけてるから、次もよろしく〜
0890nobodyさん03/03/19 15:26ID:???
334トリップ忘れた・・・(汗
0891nobodyさん03/03/19 15:26ID:???
このすれ く さ い
0892nobodyさん03/03/19 15:27ID:???
おまえが近づかないようにするためだよ。
0893nobodyさん03/03/19 15:27ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < サブルーチン (1)
 (ニE(#つo⊂#)

Perlで一番重要な、サブルーチンについての説明だよ。
自分で処理を決める関数のようなものがつくれるから、ユーザー関数とかも呼ばれるよ。
サブルーチンは、「宣言」しておくと「実行」できるようになるよ。

じゃあ、宣言の方法を説明するね。
個人的な話だけど、ボクは、 { } の中に改行がくるときは、
インデントすることにしてるよ。インデントっていうのは、
行の始めにタブやスペースをいれて、始まりを右にずらすことだよ。
アンインデント、はこの逆だね。
これを使うと、スクリプトが複雑になってくると見やすくていいよ。

sub abc{
$x ++;
}

これは、変数 $x に 1 を足す、サブルーチンだね。
呼び出すには、 &abc; って書いて呼び出すよ。

サンプル。「2」って表示されるよ。
$x = 1;
&abc;
print "$x";
sub abc{ $x ++; }

サブルーチンはとっても重要で便利だから、必ずマスターしてね。
0894nobodyさん03/03/19 15:27ID:???
うん、そうしてね。
わかってくれてうれしいよ

だんだん難しくなっていくね
わからないことがあったら気軽に聞いてね。
0895nobodyさん03/03/19 15:27ID:???
ありがと、
とりあえず今のところ大丈夫だよ。

次は何が出てくるのか楽しみです。
0896nobodyさん03/03/19 15:27ID:???
cgi-lib.plを使わないの簡易掲示板の作り方を教えて欲しいでつ。
0897nobodyさん03/03/19 15:27ID:???
待て、一番重要なサブルーチンの説明がよりによって引数無し、グローバル変数操作かよ。
常識的なサンプルを提示できないなら、頼むから何もしないでくれ。はっきりいって迷惑。
0898nobodyさん03/03/19 15:27ID:???
(1)って書いてるじゃねーか(2)があるんだろ
おとなしく待てよ行数規制があるんだから
0899nobodyさん03/03/19 15:28ID:???
(2)はどこじゃヴぉけぇ!!!!!
0900nobodyさん03/03/19 15:28ID:???
sub hogehoge {
 my %param = @_;

#何か

 return ...;
}
0901nobodyさん03/03/19 15:28ID:???
>これは、変数 $x に 1 を足す、サブルーチンだね。

( ´,_ゝ`) プッ $x= 'A'でも1足すのかよ

$x= 'A';
$x++;
print $x; # これはB

$x= '?';
$x++;
print $x; # これは1

よく頭に叩き込んでおけ
レス数が900を超えています。1000を超えると表示できなくなるよ。