2005年10月20日

caller

Perlを愛する皆様こんにちは!
完全に風邪と融合している製作者Bです。

さて今回は珍しくプチ辞書の更新です。
教のお題は『caller』さあいってみましょう。

caller.cgi
#!/usr/bin/perl
&ma('邪') if($ENV{QUERY_STRING} eq 'ja');
&ma('教') if($ENV{QUERY_STRING} eq 'kyou');
&ma('徒') if($ENV{QUERY_STRING} eq 'to');
&ma('OK');
sub ma{
print "Content-Type: text/html\n\n".
join('<br>',@_).
'<hr>LINE:'.(caller)[2];
exit;
}

『$ENV{QUERY_STRING}』が
「ja」なら「邪」(該当個所:『&ma('邪') if($ENV{QUERY_STRING} eq 'ja');』)
「kyou」なら「教」(該当個所:『&ma('教') if($ENV{QUERY_STRING} eq 'kyou');』)
「to」なら「徒」(該当個所:『&ma('徒') if($ENV{QUERY_STRING} eq 'to');』)
と表示し、それ以外なら「OK」を出します。(該当個所:『&ma('OK');』)

それぞれの表示の下方になにやら数字が表示されているかと思います。
今回のポイントはそこです。

その表示されている数字は『&ma』の呼び出された行数です。
プログラム内の行数ということですが、行数を表示するものとして『__LINE__』を知っている方もおられるかとおもいます。
しかし、『__LINE__』をサブルーティン内使っても実際に『__LINE__』が置いてある行数を表示してしまい、サブルーティンが呼び出された行数を表示することはできません。
そこで『caller』の登場です。


この『caller』実は使い方が二種類あります。

■使い方其の一
($zero,$one,$two)=caller;

『$zero』呼び出し元のパッケージ(jcode.pl等の一行目に書いてある『package ○○;』の「○○」が当てはまります。)
『$one』呼び出し元のファイル名
『$two』呼び出し元の行数


■使い方其の二
($zero,$one,$two,$three,$four,$five)=caller(0);

『$zero』呼出元のパッケージ
『$one』呼出元のファイル名
『$two』呼出元の行数
『$three』呼出元のサブルーティン
『$four』引数有る(1)、無し(0)
『$five』戻り値の受け取り先が配列(1)、スカラー(0)

『caller』に引数を与えると其の一とは違った値を返します。
『$two』までは其の一と一緒ですが、『$three』『$four』『$five』と新たに加わっています。
『caller』の引数には数字を使い、その数字分遡った呼出先の情報を表示します。
よって、「0」を引数に設定すると其の一と同じ呼出元からの情報となります。


上の「caller.cgi」の『&test』を使って
open IN,'./jakyou.dat' || &test('邪教ファイルが開けませんでした。');

なんてやるとエラーと一緒にどの行で起ったエラーかがわかっていい感じです。
また、複数のファイルに分けてプログラムを作成する場合はファイル名も表示すると更に便利です。



なんて分かったような説明していますけど、製作者Bつい一ヶ月前には『caller』の存在に気付いていませんでした。
エラーを表示するサブルーティンにいちいち『__LINE__』やら『__FILE__』やらを渡していたということに赤面してしまう次第です。
嗚呼、ソースを誰にも見られたくない。

さて、気を取り直しまして、この『caller』結構便利です。
エラーの発見やら簡単になりそうでメンテナンスなんかに最適っぽいです。
動かすことだけに主眼を置くと、無駄なコーディングだと思われてしまいがちですが、大きなプログラムを組むとき等メンテナンスが必用なものに利用すると大きく作業時間を短縮することできるはずです。

噂によると、邪教の筆頭であるPHPにはこの機能無いとか……フッ(-_- )

『caller』があるのはPerlだけ!
邪教徒共はエラー個所を一行ずつちまちまと調べるおるが良いわっ!
posted by 製作者B at 13:41| パリ ☁| Comment(40) | TrackBack(0) | プチ辞書 | このブログの読者になる | 更新情報をチェックする

2005年10月14日

プロジェクタ?

本日Flash8Professionalを購入してきました。
買ってもらったとも言います。

インストールして使ってみたのですがインターフェイスがFlashMX2004Professionalと非常に似ている為、使い易くてぐーでした。

ビデオ編集とかも楽々。

よーし前に作った作品も読み込んでみよう、とか色々していたら、変なもの見つけました。

プロジェクト

閉じると

プロジェクタ

にせものつかまされた!?
ぬう、ヨドバシのあの親切そうな店員さんは邪教徒だったのか!
posted by 製作者B at 17:35| パリ | Comment(0) | TrackBack(0) | 雑記 | このブログの読者になる | 更新情報をチェックする

2005年10月13日

良い子の諸君!

      r ‐、
      | ○ |         r‐‐、
     _,;ト - イ、      ∧l☆│∧  良い子の諸君!
    (⌒`    ⌒ヽ   /,、,,ト.-イ/,、 l  全てのWebコンテンツが
    |ヽ  ~~⌒γ⌒) r'⌒ `!´ `⌒)  Perlでできていたら素晴らしいと
   │ ヽー―'^ー-' ( ⌒γ⌒~~ /|  思わないか!?
   │  〉    |│  |`ー^ー― r' |
   │ /───| |  |/ |  l  ト、 |
   |  irー-、 ー ,} |    /     i
   | /   `X´ ヽ    /   入  |





そうだよねぇ……。




素晴らしいよねぇ……。




ん?




なんじゃコリャ?↓
四次元殺法検索

また邪教徒か!?
人々は「四次元殺法コンビ」というキーワードを使って一体何を探しているのだろうと考えると夜も眠れません。
posted by 製作者B at 16:34| パリ | Comment(1) | TrackBack(0) | 雑記 | このブログの読者になる | 更新情報をチェックする

2005年10月05日

無限ループ基本

こんにちは皆様お元気ですか?
昨日は水曜日だとばっかり思っていた製作者Bです。

今日コンビニで史上最強の弟子 ケンイチを読んでいるときに気づきました。
ショックで[ちしょうけん]を使いそうになりました。

さて、そんなこんなで無限ループの第三回です。
もう既にネタ切れ感が強いのですが。気にしません。
はじめは簡単なネタで後から発展系をやれば良かったなんて思ってもいません……嗚呼……



気を取り直して今日の無限ループです。
mugen3.cgi
#!/usr/bin/perl
print "Content-Type: text/html\n\n";
my @jakyou=('邪教徒','は','帰れ','と','言ったはずだ!');
for($i=0;;$i++){
 print $jakyou[$i];
}
exit;

『for文』の終了条件が無い為に無限ループするわけですけど。

簡単なプログラムの本なんかでこの例文は良く『for(;;){}』って書かれるのを見たことあるかと思いますが、
こうやって例文を書いてみて思いました。

こんなミスしません。

確かにプログラムの経験が無いときには、本に載っているのをみて「ふむふむこう書いてはいけないんだな気をつけよう」みたいに思っていたのですが、いざやってみるとこのミスはない。
できるだけありそうな間違いを書こうかと思ったのですが、思いつきませんでした。

そもそも、『foreach文』があるPerlでは『for文』の出番が少ないような気もしてきました。


さてさて、答えというか解決方法は以下です。
mugen3_A.cgi
#!/usr/bin/perl
print "Content-Type: text/html\n\n";
my @jakyou=('邪教徒','は','帰れ','と','言ったはずだ!');
for($i=0;$i<length(@jakyou);$i++){
 print $jakyou[$i];
}
exit;

これで気持ちよく邪教徒共を追い払えます。

ちゃんと終了条件を『length(@jakyou)』入れてあげれば、『$i』の値が『@jakyou』の長さ(ここでは5)より小さい間は『print $jakyou[$i];』を実行しつづけます。


『foreach文』も『for文』も
どちらも使えるのはPerlだけ
という台詞を挨拶代わりに使っていただけると幸いです。
『foreach文』なんていらねぇよとか言っている邪教徒は体育館裏まで来るように。
posted by 製作者B at 19:02| パリ ☀| Comment(0) | TrackBack(1) | 無限ループコレクション | このブログの読者になる | 更新情報をチェックする

2005年10月04日

正規表現五つ星

なにやら仕事が溜まってきた今日この頃、いかがお過ごしですか?
現在5つの仕事が平行進行中の製作者Bです。
年末に記事を見返したときに「あー、あのころは大変だったな」なんて笑えれば幸いです。

久々更新。正規表現の第五回です。
今回はどれかにマッチング『[]』を取り上げます。
なんだかカッコばっかりでよく分かりませんが……。
seiki5.cgi
#!/usr/bin/perl
print "Content-Type: text/html\n\n";
if($ENV{QUERY_STRING}=~/[jakyou]/i){print 'さては貴様邪教徒だな!';}
else{print '他はよし。';}
exit;

『j』『a』『k』『y』『o』『u』『J』『A』『K』『Y』『O』『U』のどれか一文字でもマッチすれば『さては貴様邪教徒だな!』と疑い深さを発揮して、
一つもマッチしない場合は『他はよし』を表示します。


■$ENV{QUERY_STRING}=~/[jakyou]/i
今回の主人公は『[]』です。
『[]』は囲まれた文字どれかにマッチするという意味です。
例えば『$ENV{QUERY_STRING}=~/[jJ]akyou/』とすると「Jakyou」か「jakyou」にマッチングするようになります。

又『[0-9]』の様に『-』(ハイフン)を使うとマッチング文字の範囲指定をすることもできます。
『[0-9]』は『\d』と指定したのと同じ「0から9」の半角数字にマッチングします。
『[a-z]』は「aからz」、『[A-Z]』は「AからZ」にマッチングします。
残念ながら『[a-Z]』はできないようなので『[a-zA-Z]』と記述しましょう。

『$ENV{QUERY_STRING}=~/[jakyou]/i』の末尾にある『i』は指定すると、大文字、小文字どちらの半角英語にもマッチングするようになります。


久々過ぎる正規表現の更新どうだったでしょうか?
相変わらず、短く、そして結構簡単だったかと思います。
簡単記述でマッチングできるのはPerlだけ!
ということが分かっていただけると幸いです。
全然簡単じゃないとか言っている邪教徒共はとりあえずPerl documentの写経でもしていなさい。
posted by 製作者B at 14:45| パリ ☀| Comment(10) | TrackBack(0) | Perl | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。