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

月宮あゆのPerl教室 Part.4

■ このスレッドは過去ログ倉庫に格納されています
0001月宮あゆ02/02/19 14:34ID:???
      _ _
     〃┏━━ 、
パタパタ |  ノノソハ)))  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (((\リリ ´ー` リ <  うぐぅ♪
  ((ニE/⌒ヾ∞"ヽ   \____________
    (こ)   ∞ |こ)
    く__∞,ノ
    し' し'
0202nobodyさん02/10/17 03:12ID:???
ハイレベルな話題も希望
0203nobodyさん02/10/17 05:05ID:???
まだ、このスレあったのか
0204月宮あゆ ◆XalkKQX1is 02/10/17 17:51ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  <変数、配列、連想配列(2:実行例)
 (ニE(#つo⊂#)

□ 変数への書き込み方
$abc = "うぐぅ";

こんな感じにすると、【変数】 $abc には、 「うぐぅ」という
【文字列】が書き込まれたことになるよ。
同じように、

$abc[0] = "月宮あゆ"; # 配列
$abc{def} = "水瀬名雪"; # ハッシュ

みたいなこともできるよ。

□ 変数からの読み込み方
たとえば、 $abc の内容を表示したいっていうときは、

print "$abc";

ってかくとできるよ。
他にも方法はあるけど、とりあえずこれだけ覚えてるといいかな。


ここまでの説明なら、「こんなものが何の役に立つかわからない」と
思う人が多いと思うけど、【変数】がなかったら、何もできないよ。
じゃあ次からは実際に使用例を見ていこうね。
0205月宮あゆ ◆XalkKQX1is 02/10/17 17:52ID:???
>>201
うぐぅ
>>202
ハイレベルな話題は、たぶんボクにはできないかな…
>>203
うぐぅ
0206nobodyさん02/10/17 20:06ID:???
これくらいの初歩からやってくれた方が漏れにとってはいいよ。
0207nobodyさん02/10/17 23:04ID:???
ストーブはどう作るの?冬にかけて
0208nobodyさん02/10/18 03:57ID:???
>>206
漏れも同じ
sage進行でマターリとおながいします。>ALL
0209月宮あゆ ◆XalkKQX1is 02/10/18 21:02ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  <時計を表示してみよう(1:ソース)
 (ニE(#つo⊂#)

じゃあ今回は時計を表示してみよう。
ソースはこんな感じだよ。

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

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

($sec, $min, $hour, $day, $mon, $year) = localtime time;

print "<html>\n";
print "<body>\n";
print "  〃┏━━<br>\n";
print "  |. ノノソハ)))<br>\n";
print "(\リリ ´ー`)リ <$day - $hour:$min:$sec<br>\n";
print " (ニE(#つo⊂#)";
print "</body>\n";
print "</html>\n";

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

C:\www\home\perl\perl0002.cgi に保存して、アクセスしてみてね。
http://127.0.0.1/perl/perl0002.cgi

詳しい解説は次にまとめてするね。
0210月宮あゆ ◆XalkKQX1is 02/10/18 21:03ID:???
>>206
うん、ボクと一緒に勉強しようね
>>207
そういう会社に入ってみればいいんじゃないのかな
>>208
マターリやっていこうね、よろしく
0211nobodyさん02/10/18 22:44ID:???
こんなきもい時計やだよ
0212rubyist@カラアゲうまうま02/10/19 09:15ID:???
同感。まあ、糞言語らしいといえばそうかな。
0213月宮あゆ ◆XalkKQX1is 02/10/19 12:32ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  <時計を表示してみよう(2:解説)
 (ニE(#つo⊂#)   算術演算子(1:加法演算子)

Line 5:カッコの中は、秒,分,時,日,月(※1),年(※2)でできてるよ。
    localtime で、時間を変数に書き込むんだけど、
    これは丸覚えでいいよ。また今度詳しく説明するね。
    この例では、6個の変数にそれぞれ書き込んでるよ。

Line11:print の中には【変数】を書くこともできるよ。
    その【変数に書き込まれてる文字や数値】を表示するよ。

※注意
月は、実際の月より、1少なくなってるよ。
実際、表示に使うなら、1足して使ってね。
同じように、年は、西暦より1900少なくなってるよ。
【変数】を計算(この例なら月に1を、年に1900を足す)するには、
次のように書くだけで簡単にできるよ。

$mon ++;
$year += 1900;

● ++
っていうのは、変数●に1を足すっていうことだね。
$mon += 1;
と書いてもできるよ。

● += ◆
で、変数●に、数値◆を足すっていうことだよ。

ぜひ年と月も表示できるように改造してみてね、答えは次回書くよ。
0214nobodyさん02/10/19 13:03ID:OUy8ZxhU
質問です。
foreach(split(/<>/,$line)){}
は必要な部分を順に取り出しているのか、
それとも一度無名配列に入れるようなことをしているのか教えてください。
0215nobodyさん02/10/19 13:51ID:???
後者じゃ
0216nobodyさん02/10/19 14:03ID:???
>>215 しくしく。ありがとうございます。変数が大きいのですが、
substrは毎回先頭から数えているような感じがするのですが、
変数使用を少なくする場合これしかないのでしょうか。
0217にひゃくじゅうご02/10/19 14:06ID:???
index で'<>'をサーチ位置指定でやって、substr で部分取り出し
0218nobodyさん02/10/19 14:10ID:???
どうもありがとうございました。
0219nobodyさん02/10/19 14:21ID:???
#!/usr/local/bin/perl

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

($sec, $min, $hour, $day, $mon, $year) = localtime time;
$year+=1900;
$mon++;

print "<html>\n";
print "<body>\n";
print "  〃┏━━<br>\n";
print "  |. ノノソハ)))<br>\n";
print "(\リリ ´ー`)リ <$year/$mon/$day - $hour:$min:$sec<br>\n";
print " (ニE(#つo⊂#)";
print "</body>\n";
print "</html>\n";

exit;

こうかね。
0220nobodyさん02/10/19 15:31ID:???
あゆあゆ以外が質問に答えるなよばか!
0221nobodyさん02/10/19 18:12ID:???
スレッド・ストッパーキタ━━━━(゚∀゚)━━━━!!!!

              ↓
0222nobodyさん02/10/19 23:56ID:8H09/WLZ
↑ごめん

222ゲトー
0223月宮あゆ ◆XalkKQX1is 02/10/20 12:38ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  <時計を表示してみよう(3:年月日を表示)
 (ニE(#つo⊂#)

じゃあ前回の答えだね。

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

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

($sec, $min, $hour, $day, $mon, $year) = localtime time;

$mon ++;
$year += 1900;

print "<html>\n";
print "<body>\n";
print "  〃┏━━<br>\n";
print "  |. ノノソハ)))<br>\n";
print "(\リリ ´ー`)リ <$year/$mon/$day - $hour:$min:$sec<br>\n";
print " (ニE(#つo⊂#)";
print "</body>\n";
print "</html>\n";

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

今回はもう行数がなくなっちゃったから終わりだけど、
次は曜日を表示してみようね。
0224 ◆FruitsMIpE 02/10/20 12:39ID:???
>>219
うん、そうだね。
>>220
ボクもわからないことが多いからね…
>>221
ストップされちゃうの…?このスレ…
0225月宮あゆ ◆XalkKQX1is 02/10/20 12:40ID:???
↑トリップ間違えました
0226月宮あゆ ◆XalkKQX1is 02/10/22 06:51ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  <if の文
 (ニE(#つo⊂#)

($sec, $min, $hour, $day, $mon, $year) = localtime time;

この部分を、

($sec, $min, $hour, $day, $mon, $year, $week) = localtime time;

こんな感じに変えると、 $week には曜日が書き込まれるよ。
でも【曜日は数字】なんだよね…
日曜日なら0、月曜日なら1…土曜日なら6が $week には入ってる。

今日が何曜日か表示したい!のに、数字じゃ困るよね。
そこで if を使ってみよう。

if(●){◆}
機能説明:もし●なら、◆する。
●…条件。 ◆…処理。

例

if($week == 0){$you = "日";}
if($week == 1){$you = "月";}
  :
if($week == 6){$you = "土";}

== っていうのは、左辺と右辺が等しい、っていう意味だよ。

このへんを使って、曜日を出してみてね。答えは次回載せるよ。
0227こうだろ02/10/22 19:25ID:???
#!/usr/local/bin/perl

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

($sec, $min, $hour, $day, $mon, $year, $week) = localtime time;

if ($week == 0) {$you = "日"; }
if ($week == 1) {$you = "月"; }
if ($week == 2) {$you = "火"; }
if ($week == 3) {$you = "水"; }
if ($week == 4) {$you = "木"; }
if ($week == 5) {$you = "金"; }
if ($week == 6) {$you = "土"; }

$mon ++;
$year += 1900;

print "<html>\n";
print "<body>\n";
print "  〃┏━━<br>\n";
print "  |. ノノソハ)))<br>\n";
print "(\リリ ´ー`)リ <$year/$mon/$day - $hour:$min:$sec−$you曜日<br>\n";
print " (ニE(#つo⊂#)";
print "</body>\n";
print "</html>\n";

exit;
0228nobodyさん02/10/22 23:16ID:???
$year/$mon/$day($you) - $hour:$min:$sec
の方が綺麗だな。
0229むしろこう02/10/23 00:29ID:???
#!/usr/bin/perl

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

($sec, $min, $hour, $day, $mon, $year, $week) = localtime time;

$mon ++;
$year += 1900;
@you = (
"日",
"月",
"火",
"水",
"木",
"金",
"土"
);

print "<html>\n";
print "<body>\n";
print "  〃┏━━<br>\n";
print "  |. ノノソハ)))<br>\n";
print "(\リリ ´ー`)リ <$year/$mon/$day - $hour:$min:$sec−@you[$week]曜日<br>\n";
print " (ニE(#つo⊂#)";
print "</body>\n";
print "</html>\n";

exit;
0230むしろこう(さらに改良)02/10/23 00:45ID:???
#!/usr/bin/perl

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

($sec, $min, $hour, $day, $mon, $year, $week) = localtime time;

@tuki = ("Jan","Feb","Mar","Apl","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
$year += 1900;
@you = ("Sun","Mon","Tue","Wed","Thu","Fri","Sat");

print "<html>\n";
print "<body>\n";
print "  〃┏━━<br>\n";
print "  |. ノノソハ)))<br>\n";
print "(\リリ ´ー`)リ <$day-$tuki[$mon]-$year($you[$week]) -- $hour:$min:$sec<br>\n";
print " (ニE(#つo⊂#)";
print "</body>\n";
print "</html>\n";

exit;
0231nobodyさん02/10/23 01:28ID:???
確かにそりゃ正解だけど配列とかその辺になってからだよそれは・・・・・
0232こうだろ(むしろこうの修正)02/10/23 15:49ID:???
#!/usr/local/bin/perl

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

($sec, $min, $hour, $day, $mon, $year, $week) = localtime time;

@tuki = ("Jan","Feb","Mar","Apl","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
$year += 1900;
@you = ("Sun","Mon","Tue","Wed","Thu","Fri","Sat");

print "<html>\n";
print "<body>\n";
print "  〃┏━━<br>\n";
print "  |. ノノソハ)))<br>\n";
print "(\リリ ´ー`)リ <$day-$tuki[$mon]-$year\($you[$week]\) -- $hour:$min:$sec<br>\n";
print " (ニE(#つo⊂#)";
print "</body>\n";
print "</html>\n";

exit;
0233むしろこう02/10/23 23:48ID:???
>>232
perlのパスは俺の場合/usr/bin/perlなんだよ・・・。
エスケープ忘れてたし・・・。
でも""の中で()は一応エスケープされてると思うんだけど。
ちゃんと実行して検証しているし。
やっぱエスケープは礼儀ということか・・・。
0234nobodyさん02/10/24 01:43ID:???
だからまだ習ってない配列とか先に進むなっての(;´Д`)
0235nobodyさん02/10/24 20:31ID:???
      _ _
      〃┏━━ 、
      |  ノノソハ)))  / ̄ ̄ ̄ ̄
    Λ_リリ ;´∀`)リ < うぐぅあげ♪
   ( ⊂#~ ∞~~#⊃ \____
   ( つ/_∞__|~
   |(__)_)
   (__)_)
0236nobodyさん02/10/25 00:18ID:???
他で習ったよ
0237月宮あゆ ◆XalkKQX1is 02/10/25 14:26ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  <曜日を表示
 (ニE(#つo⊂#)

>>227 が答えだね。。
配列とか使ってやるのは、もっと先に応用例としてあげたいから、
勝手に応用を使わないでほしいな…

今日の夜くらいに続きをあげようと思うけど、次考えてないんだよね…
ちょっと考えとくね
0238月宮あゆ ◆XalkKQX1is 02/10/26 02:46ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  <配列の扱い方
 (ニE(#つo⊂#)

ちょっと配列の話が出てきたから説明するね
配列は、 $abc[0] とかで扱えるんだけど、
@abc で、[0] から 最後まで全部、っていう意味があるんだよ。

@you = ("日", "月", "火", "水", "木", "金", "土");

こういう感じで、0ページめから順番に値をいれることができるんだ。
こういうのを【要素】っていうから覚えておいてね。
最初の要素は、1じゃなくて0だから気を付けてね。

この例で、 $you[0] には、「日」、 $you[1] には、「月」…
っていう具合に、 $you[6] まで入ってるよ。

[ ] の中は、変数も使えるから、曜日の話には応用できるね。
こっちのほうが書き方がシンプルで好きだから、
ボクはいつも配列を使ってやってるよ。
ちなみに、連想配列の、「全部の要素」は、 % をつけて表すよ。

じゃあ、前回のソースを書き替えてみようね。

@you = ("日", "月", "火", "水", "木", "金", "土");
($sec, $min, $hour, $day, $mon, $year, $week) = localtime time;
print "$you[$week] 曜日";

ってこんな感じで曜日が出るね。
行数がなくなったから簡潔でごめんね。
次回は、ひととおり計算ができる、算術演算子をやるよ。
0239月宮あゆ ◆XalkKQX1is 02/10/26 02:48ID:???
補足しておくと、配列の全部は、 @ をつけて表すよ。
配列の中のひとつだけ、は、 @ じゃなくて $ をつけて、
[0] みたいな【添え字】をつけるよ

ってことだね
0240月宮あゆ ◆XalkKQX1is 02/10/27 00:46ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  <算術演算子(2)
 (ニE(#つo⊂#)

これぐらいはひととおり、全部覚えてね。
数学でおなじみの、計算ができる演算子だよ。

● = ◆ + ★
 数値、◆と★を加算(足し算)した値を●に代入するよ。

● = ◆ - ★
 数値、◆から★を減算(引き算)してその値を●に代入するよ。

● = ◆ * ★
 数値、◆に★を乗算(掛け算)してその値を●に代入するよ。

● = ◆ / ★
 数値、◆から★を除算(割り算)してその値を●に代入するよ。

● = ◆ % ★
 数値、◆を★で割った、余りを●に代入するよ。
 ◆と★は小数なら、小数点以下は切り捨てられて計算されるよ。

● = ◆ ** ★
 数値、◆の★乗の値を●に代入するよ。


優先順位についてちょっと説明するね。
実際の数学と同じように、加算、減算は、後回しにして計算されるよ。
先に計算したいなら、 ( ) でくくってみてね。
じゃあ次回は、 for でのループ(繰り返し処理)について説明するね。
0241nobodyさん02/10/27 10:54ID:???
あゆた〜〜ん
0242月宮あゆ ◆XalkKQX1is 02/10/27 13:04ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  <for の文、数値比較演算子
 (ニE(#つo⊂#)

for っていうのは、ループができるんだよ。
じゃあまず、文法の説明をするね。

for ( ●; ◆; ★ ) { ■ }

● … 最初の状態  ◆ … ループする条件
★ … 増減式    ■ … 処理

じゃあ、ちょっと例を書いてみるね。

for ( $i = 1; $i <= 10; $i ++ ) { print "$i"; }

これは、最初、変数 $i は 1 だよ、って決めて、ループ1回ごとに、
変数 $i に 1 を加算していくよ。
変数 $i が、 10 以下なら、次のループに入るよ。
と、いうことは、この例では、10回の処理が繰り返されて、
"12345678910" って表示されることになるね。

<= っていうのが出てきたから、数値比較演算子もひととおりみておくね。
if とか、 for とかの条件で使われることが多いよ。

● == ◆ … ●と◆が数値として等しい ( 0 と 0.0 は等しい )
● != ◆ … ●と◆が数値として等しくない
● < ◆ … ●が◆より小さい
● > ◆ … ●が◆より大きい
● <= ◆ … ●が◆以下
● >= ◆ … ●が◆以上
0243月宮あゆ ◆XalkKQX1is 02/10/27 13:04ID:???
>>241
ど、どうしたの…?
0244月宮あゆ ◆XalkKQX1is 02/10/29 22:19ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < while / until / next / last
 (ニE(#つo⊂#)

while / until っていうのは、どっちもループだよ。
じゃあまず、文法の説明をするね。

while ( ● ) { ◆ }
until ( ● ) { ◆ }

● … 式 ( 後述参照 )
◆ … 繰り返す処理

どちらの場合でも、● は、比較演算子を使った条件を指定するよ。
数値比較演算子じゃなくって、文字列比較演算子っていうのも
あるんだけど、それは次くらいに詳しくみてみるよ。

while は、英語で、【〜の間】だね。
Perl でも、条件●が成立する間、◆を繰り返すことになるよ。

until は、英語で、【〜まで】だね。
●が成立するまで(=●が成立しない間)、◆を繰り返すよ。

next / last は、ループを途中でやめたりするのに使うよ。

next は、現在のループを終了して、次のループに入る、っていうこと、
last は、全てのループからただちに抜け出す、っていうことだよ。
じゃあ次回は実例を見てみようね。
0245nobodyさん02/10/30 00:32ID:???
ここまでは普通についていけるな
0246月宮あゆ ◆XalkKQX1is 02/10/31 22:33ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < ループと文字列比較演算子
 (ニE(#つo⊂#)

こんなことをすることは少ないと思うけど、例を挙げるね。

$hoge = "aaa";
until($hoge eq "aaaaaaaaaa"){
    $hoge = "a$hoge";
}

この例では、変数 $hoge の前に、次々に "a" を追加していってるね。
"a" が10個並んだところでループ終了だね。

どんな時に、条件に一致するか (真偽) については、次回説明するね。

これも条件で使われるよ。数値として比較する数値比較演算子とは違って、
文字列として比較する、文字列比較演算子っていう名前があるよ。

● eq ◆ … ●と◆が完全に一致
● ne ◆ … ●と◆が一致しない
● =~ /◆/ … ●に◆が含まれる …(※)

他にもあるんだけど、これだけ覚えてれば十分だよ。

※本当は、【正規表現】っていう新しいことなんだけど、
 よく使いそうだからここで一緒に覚えようね。
 正規表現は、近いうちに勉強するよ。
0247月宮あゆ ◆XalkKQX1is 02/11/01 17:40ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < 真と偽
 (ニE(#つo⊂#)

条件に合致するかどうかをチェックするのは、真か偽のどちらかで表されるよ。
要は、「合致している、成立する」が真、「しない」のが「偽」だよ。

if も、 while も、 until も、真偽をチェックするよ。

じゃあここで、どんな時に真、偽になるかを覚えようね。

偽:0 / 未定義 / 空白
真:「偽」以外の要素

if(0){print "偽だからここは表示されないよ";}
if(1){print "真だから表示されるよ";}
$abc = "";
$def = "ghi";
if($abc){print "空白変数だから偽";}
if($def){print "文字列だから真";}
if($jkl){print "未定義変数だから偽";}

じゃあ次回は、 if をもっと便利に扱える、
elsif 〜 else を勉強しようね。
0248月宮あゆ ◆XalkKQX1is 02/11/03 23:56ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < if / elsif / else
 (ニE(#つo⊂#)

まず、文法から見てみようね。

if ( ● ) { ◆ }
elsif ( ◎ ) { ◇ }
else { ■ }

●◎ … 条件  ◆◇■ … 処理

まず、 if だけの文と同じように、 ● の真偽がチェックされて、
真なら ◆ が実行されるよ。
偽なら、 if から抜けて、次に elsif の◎の真偽がチェックされるよ。
真なら、◇が実行されて、偽なら、 else の■が実行されるよ。
elsif は、ひとつの if 構造のなかにいくつでも書くことができるよ。

例として書いてみるね。

$i = 100;
if($i < 50){print "50より小さい";}
elsif($i > 120){print "120より大きい";}
elsif($i == 80){print "80である";}
else{print "その他";}

このへんはとっても重要だから、しっかり覚えておいてね。
0249 ◆PxAOHU.zVE 02/11/05 02:53ID:???
おもったより続いてますねぇ
頑張ってください^^;
0250 ◆iYf0laFI3w 02/11/05 03:36ID:???
ついでですが…保存予定ですので宜しくお願いします。m(_ _)m
0251 ◆iYf0laFI3w 02/11/05 03:37ID:???
ごめんなさい…ageてしまった…
0252月宮あゆ ◆XalkKQX1is 02/11/05 22:20ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < 正規表現 (1)
 (ニE(#つo⊂#)

正規表現っていうのを勉強するよ。
ちょっと難しい、ってよく言われるけど、そう思わずに
しっかり読むと必ず分かるから、とりあえず読んでみてね。

正規表現は、柔軟なパターンマッチをすることができるよ。
例えば、特定の文字が含まれるかどうか調べたり、
文字の置き換えをしたり、またあとで勉強するけど、
split っていう関数のパターンに使ったりできるよ。

ここはよくわからなくてもいいよ。
わかりやすく説明すると、

● =~ /◆/★

これで、【変数●がパターン◆にマッチ】っていうことだよ。
【マッチ】っていうのは、簡単に言うと、【●が◆の状態である】
っていうことなんだ。じゃあ、【◆の状態】っていうのを説明するね。
★については、2回後くらいに説明するね。今はなにも書かいでね。
まず、例は、3回前に勉強した含まれるパターンだね。
◆には【普通の文字】と、特別な意味のある、【メタ文字】のふたつが使えるよ。
3回前に勉強したのは、普通の文字だけだね。
じゃあ、メタ文字について説明するね。

続く…
0253月宮あゆ ◆XalkKQX1is 02/11/05 22:20ID:???
…続き

. … なにか1文字
* … 直前の文字やパターンの0回以上の繰り返し (いくつあってもよい)
+ … 直前の文字やパターンの1回以上の繰り返し (必ず1つ以上ある)
? … 直前の文字やパターンが1つだけあってもなくてもよい
[abc] … [ ] で囲んだ文字の中のどれか1文字
^ … 【…で始まる】という意味。パターンの最初に使う。
$ … 【…で終わる】という意味。パターンの最後に使う。
{5} … 直前の文字やパターンの5回繰り返し
{3,8} … 直前の文字やパターンの3回以上8回以下の繰り返し

例だよ。

if ( $abc =~ /^def$/ ) { print "マッチ"; }

これは、

if ( $abc eq "def" ) { print "マッチ"; }

と、同じ意味になるよ。
とりあえず、何の役に立つかわからなくてもいいから、
使い方は覚えておいてね。
0254月宮あゆ ◆XalkKQX1is 02/11/05 22:20ID:???
>>249
うん、ありがとう
頑張るよ

>>250
ずっと読んでくれてるの?
なんだか嬉しいな

>>251
別に気にしなくていいよ


…みんなはこのへんちゃんと理解してくれてるのかな?
わかりにくいところがあったら言ってね。
説明しなおすからね。
0255月宮あゆ ◆XalkKQX1is 02/11/09 23:36ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < 正規表現 (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 "アルファベット大文字以外の文字が含まれている"; }

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

#間違いがあったら指摘してね…
0256 ◆soCKet026k 02/11/10 21:21ID:Za96cXhY
まだなんとかわかるよ。
0257 ◆PxAOHU.zVE 02/11/11 21:11ID:???
今のペースでいくとオブジェクトな話になるのは何年後だろう^^;
0258nobodyさん02/11/12 01:15ID:???
まあ後は自分で勉強すれば良いだけの話だし、いいのでは?
途中で挫折した香具師多いと思われるから、マターリ進行で…
0259月宮あゆ ◆XalkKQX1is 02/11/12 18:44ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < 正規表現 (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"; }

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

今回はちょっと短いけどこれで終わりだよ。
0260月宮あゆ ◆XalkKQX1is 02/11/12 18:45ID:???
>>256
うん、それならよかった

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

>>258
うん、そうだね
まあ実用的なスクリプト作れるぐらいになったら終了、かな
0261月宮あゆ ◆XalkKQX1is 02/11/14 21:11ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < 正規表現 (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 とかもあるけど、それはそのとき説明するね。
0262月宮あゆ ◆XalkKQX1is 02/11/14 21:11ID:???
一行抜けちゃった…

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

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

0265美坂香里 ◆96KAORIvws 02/11/16 01:46ID:???
片付けないと炬燵出せません(T-T)
0266月宮あゆ ◆XalkKQX1is 02/11/16 12:40ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < 配列操作
 (ニ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

次回は、ファイル入出力とファイルハンドルについて説明するね。
0267月宮あゆ ◆XalkKQX1is 02/11/16 13:03ID:???
>>263
うん、ありがとう
途中でいきなり終わり、なんてことにならないようにがんばるよ

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

>>265
香里さんの家ってそんなに散らかってるの…
片づけてあとで温かいこたつに入るときもちいいよ
0268栞 ◆SHIORIrGsg 02/11/17 02:10ID:???
冬でもアイス美味しいですよ
0269月宮あゆ ◆XalkKQX1is 02/11/18 18:35ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < ファイル入出力 (1)
 (ニE(#つo⊂#)

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

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

open ★, ◆
close ★

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

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

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

print "$test";

Perl の勉強熱心な人は、実際試してみるてね。
今回のプログラムは、いろいろやっていると何か気付くことがあるはずだから、
必ず試しに動かしてみてね。 test.txt の中を書きかえながら。
0270月宮あゆ ◆XalkKQX1is 02/11/18 18:35ID:???
>>268
ボ、ボクはいいよ、遠慮しとく
0271nobodyさん02/11/18 22:08ID:???
ヲタとヲタの交流場はここですか?
0272栞 ◆SHIORIrGsg 02/11/19 00:28ID:???
>>271
…そんな事言う人嫌いです。
0273 ◆soCKet026k 02/11/19 17:09ID:/vFjknvy
>>270
タイヤキアイス食え。

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

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

open ★, "> test.txt";

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

print ★ "test";

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

行数が入らないから続くよ
0276月宮あゆ ◆XalkKQX1is 02/11/19 23: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;
----------------------------------------------------------------

ちゃんと動かしてみてね。
今回はここで終わりだよ。
0277月宮あゆ ◆XalkKQX1is 02/11/19 23:17ID:???
>>273
たい焼きアイス…
あるなら食べてみたいかも

>>274
うん、ありがとうね
0278一うぐぅファン02/11/20 00:58ID:???
たい焼きアイスはマジであるよ。
数年前CMやってたの覚えてるし、多分うちの近所のスーパーに行けばまだ売ってると思う。

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

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

-[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;
----------------------------------------------------------------

>>278
そうなんだ、じゃあボクも近くのスーパーに行って探してみるよ
ありがとうね
0280一うぐぅファン ◆unyuH2NGgE 02/11/20 23:12ID:???
この教室は解り易いよ〜。

楽しみに見てますです。

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


コンビニでたいやきアイスは発見できませんでした・・・残念です。
0281秋子 ◆AKiKoYVoZk 02/11/20 23:18ID:???
今日も頑張ってね。
0282祐一 ◆yuitiQyXzU 02/11/21 10:39ID:???
昨日の教室はなかったのか?
0283月宮あゆ ◆XalkKQX1is 02/11/21 21:00ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < 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 "$_";} # ● を省略したら、省略の原則、 $_ に入るよ。

この話を応用して次回にもっていくから、絶対に使えるようにしておいてね。
0284月宮あゆ ◆XalkKQX1is 02/11/21 21:00ID:???
>>280
わかりやすい…?
そう、かな…?
ありがとね

>>281
うん、頑張るよ

>>282
1日1つ頑張りたいけど、無理な日もあってごめんね
0285一うぐぅファン ◆unyuH2NGgE 02/11/21 23:40ID:???
.txtで今までの授業全部保存してるよ!

すっごく楽しみに見てるよ、これからも頑張ってね。
0286nobodyさん02/11/23 07:35ID:???
私も楽しみにしているので、無理せず続けて下さいね。
0287月宮あゆ ◆XalkKQX1is 02/11/23 09:15ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < ファイル入出力 (3)
 (ニE(#つo⊂#)

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

open IN, "test.txt";

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

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

close IN;

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

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

ってやると表示されるよ。
じゃあ次回は、ファイルの読み書きもわかったし、
ユーザーが何か入力したのを受け取って結果を表示する、
ってことを勉強してみようね。
0288月宮あゆ ◆XalkKQX1is 02/11/23 09:15ID:???
>>285-286
ただの趣味の延長だから、変なところがあるかもしれないけど…
気に入ってくれてうれしいよ、ありがとうね。
0289月宮あゆ ◆XalkKQX1is 02/11/23 10:46ID:???
※注意

最初にも言ったけど、ここの教室でやっていることは、
【わかりやすくするために多少強引な説明をしている】ところがあるよ。
基本なんだけど、【わかりにくいし使われもしないから省いている】ところも
たくさんあるよ。他のサイトとか見てると、戸惑うことも多いとおもうけど、
混同させないように注意してね。
0290一うぐぅファン ◆unyuH2NGgE 02/11/23 12:29ID:???
そ〜なんだ、解りました!
0291nobodyさん02/11/23 15:54ID:???
すごいね

メルマガとか出してみたら?
0292 ◆soCKet026k 02/11/23 20:37ID:bk4yPgrO
うぐぅage
0293nobodyさん02/11/24 17:29ID:???
うぐぅ、あゆが帰ってきてる。まだ、このスレあったんだ。
0294nobodyさん02/11/25 15:02ID:???
まだやってんの?ヲタドモ
0295nobodyさん02/11/26 07:17ID:wcv/13ds
カエレ
0296nobodyさん02/11/26 12:02ID:???
妄想族
0297nobodyさん02/11/26 16:16ID:???
       ∬
(´・ω・)っ旦 <マターリ
0298nobodyさん02/11/26 20:26ID:???
  ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ( ´∀`)< このスレきもい♪
 (     つ  \______
 (_○___)
0299>ALL02/11/26 22:58ID:???
煽りは放置の方向でマターリと
0300月宮あゆ ◆XalkKQX1is 02/11/27 18:09ID:???
  〃┏━━
  |. ノノソハ)))
(\リリ ´ー`)リ  < フォームデーターの受けとり
 (ニ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の世界はとっても広がるよ。
次回は、簡易掲示板を書いてみるね。

#投稿が遅れてごめんね
0301月宮あゆ ◆XalkKQX1is 02/11/27 18:11ID:???
>>290
うんうん、よろしくね

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

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

>>297
うんうん、マターリしようね
■ このスレッドは過去ログ倉庫に格納されています