タグ

ブックマーク / tociyuki.hatenablog.jp (10)

  • CGI スクリプトから Perl Web Server Gateway Interface (PSGI) でコードを動かす - Tociyuki::Diary

    Perl Web Server Gateway Interface 仕様に馴染んでみようと、CGI スクリプトから PSGI でコード・リファレンスを呼び出す CGI::Joint を試しに作ってみました。 run クラスメソッドにコード・リファレンスを渡します。run メソッドは標準入力、標準エラー出力、環境変数から PSGI 互換のハッシュ・リファレンスを作って、コード・リファレンスを呼び出します。コード・リファレンスが返す配列リファレンスをチェックして、ヘッダとボディを標準出力に書き出します。エラーを検出したとき、デフォルトではスタータス 500 でブランク同然の html をブラウザに返します。$CGI::Joint::FatalsToBrowser が真のときは、$EVAL_ERROR をブラウザに返します。 下のスクリプトを Apache の ExecCGI 属性がオンになって

    CGI スクリプトから Perl Web Server Gateway Interface (PSGI) でコードを動かす - Tociyuki::Diary
  • Test-Behaviour-Spec-0.01 を CPAN へ登録 - Tociyuki::Diary

    Perl のテストで Behaviour Driven Development (BDD) して遊ぶためのモジュールを CPAN に登録しました。ご利用ください。 ⇒ http://search.cpan.org/~tociyuki/Test-Behaviour-Spec-0.02/ 0.01 の POD の使用例コードにセミコロンが一ヶ所抜けていたので、修正しました。コード体は 0.01 と同じです。 ⇒ http://search.cpan.org/~tociyuki/Test-Behaviour-Spec-0.01/ Test::Behaviour::Spec は、ふるまいを記述するための述語 describe、it、spec をサブルーチンとして使えるようにするだけで、いっさい Test::More 等への変更をおこないません。そのため、従来のどのようなテストにも、ふるまい記述を

    Test-Behaviour-Spec-0.01 を CPAN へ登録 - Tociyuki::Diary
  • JSON::Hatchet の構文解析子 - Tociyuki::Diary

    CPAN モジュールを見て回っている限りでは Perl では構文解析子ジェネレータを使うまでもなく、LL(1) 文法で楽に構文を記述できる入れ子括弧テキストや、XML、JSON 程度なら、Perl で直書きする方がポピュラーな気がします。Ruby なら、LALR(1) 文法対応のコンパイラ・ジェネレータ Racc を使うのが楽でしょう。ANTLR は Python 優遇で、Perl5 と Ruby ポートは進んでいない印象を受けてますが、今はどうなのでしょう。 ⇒ Leo's Chronicle: 正規表現に見切りをつけるとき 正規表現の能力を超えるデータはどう扱えばいいのか?一番のお勧めは、ANTLRを使って字句解析(lexer)、構文解析(parser)するプログラムを生成する方法です。一昔前なら、lex/yacc、flex/bison, JavaCCなどしか選択肢がなかったのですが、

    JSON::Hatchet の構文解析子 - Tociyuki::Diary
  • トランポリン版の継続渡し leaf_count_cps_t - Tociyuki::Diary

    11月16日に goto を使った強引なやりかたで、末尾再帰のループ化と継続渡しの実行をやってみたところ、コメント欄で shiro さんにトランポリンを紹介してもらいました。 ⇒ http://d.hatena.ne.jp/tociyuki/20061116/1163674424#c1163895106 shiro 『なお、ベース言語が末尾呼出し最適化を保証してくれない場合によく使う手としてトランポリンがあります。各関数を、結果を返すのではなく、その関数の継続手続きを返すように書いておきます。そして、(途中略)ひたすら返って来た継続を呼び出しつづけるドライバを書いて駆動します。 これだとベース言語のスタックを消費しません。』 随分と、あれから経った気がしますが、突然、これをやってみたくなったので試してみました。 まずは、関数コールをおこなわせるコードリファレンスをドライバに渡して、こんな風

    トランポリン版の継続渡し leaf_count_cps_t - Tociyuki::Diary
  • @INC からモジュール探し - Tociyuki::Diary

    前回の perlwhere に対して、id:dankogai さんにフォローをしていただきました。ありがとうございます。 ⇒ 404 Blog Not Found:perl - モジュールと%INC まず、モジュールのありかを手っ取り早く調べる方法としては、 % perldoc -mlが使える。PODが含まれてなくてもOK。 Perl のスクリプトの中でモジュールのありかを調べるのにも使えるようにと考えていて前のエントリになったのですが、前提を書き忘れていました。ご指摘の通り、単にありかをコマンドラインから調べるためだけなら、perldoc で充分です。書いてなかった意図を察していただいており、恐縮します。 さて、そのためには、前回は Module::Build::ModuleInfo を使えば楽だと書いたのですが、今回はこれを使わないで調べる方法を id:dankogai さんにならって

    @INC からモジュール探し - Tociyuki::Diary
  • Re: perl - myとourとscopeと - Tociyuki::Diary

    より正確には「our変数を $a のようにパッケージを指定せずに使うときに補うパッケージ名は my 変数と同じスコープ・ルールに従い、$main::a のようにパッケージ名を指定したときはスコープに関係ないグローバル変数として利用可能」とでも言いましょうか。 ⇒ http://blog.livedoor.jp/dankogai/archives/50982802.html それではour $var = 'val';とは何でしょうか。以下と等価だと言えばいいのです。 do{ no strict 'refs'; ${ __PACKAGE__ . '::var' } = 'val'; }; パッケージ名を指定するときは混乱しようがないのですが、指定してない our 変数がどのグローバル変数に対応しているのか注意を要するときがあります。それは一つのスコープに複数のパッケージを並べて記述するときです

    Re: perl - myとourとscopeと - Tociyuki::Diary
  • Perl 5 を OOP 言語にするには - Tociyuki::Diary

    「sumim’s smalltalking-tos - オブジェクト指向言語として必須な要素とは何か?」のコメント欄に質問を書いていたとき、私が sumim さんの立場になったとして、もしこの質問をされたらどう答えてみようかと考えてみました。 # tociyuki 『PerlをOOPとみなすには > 関数のコールを「メッセージング」だと“読み替え”る 必要があるという部分の意味が読み取れませんでした。 Perlでは「レシーバ->メソッド名」をevalする実行時に、レシーバのクラス(レシーバが文字列スカラーならそれと同じ名称のパッケージ、もしくはレシーバーがリファレンスならばそれにblessされたパッケージ名)の継承樹を、メソッド名と同じ名称の関数を探し出してから呼び出す仕組みになっています。 この、「実行時に、その都度、継承樹を辿って関数を探し出してコール」する動作を「関数のコール」と読ん

    Perl 5 を OOP 言語にするには - Tociyuki::Diary
  • テスト駆動で 0 から 255 の数字にマッチする正規表現へ変形してみる - Tociyuki::Diary

    ぶくま経由で、RFC 3986 URI の日語訳にたどり着き、読んでいました。スムーズな日語ですんなりと読めて、良い訳だと思いました。私は誤訳を見つけられませんでした。 それはともかく、読んでいる最中に、RFC3986 だけではないのですが、IPv4 アドレスの数字にマッチする構文が、正規表現向けでないのに改めて気になりました。RFC の記述をそのまま正規表現にすると、バックトラックをおこす書き方になっています。 バックトラックがおきないようにするには、先頭から1文字ずつ見ていくだけで残りの選択肢のどれに進めばいいか決定できるようにすればよろしい。ということで、これをテスト駆動で正規表現に向いた記述に変更してみました。 ⇒ http://www.studyinghttp.net/cgi-bin/rfc.cgi?3986#Sec3.2.2 IPv4address = dec-octet

    テスト駆動で 0 から 255 の数字にマッチする正規表現へ変形してみる - Tociyuki::Diary
  • @- と @+ の違い - Tociyuki::Diary

  • Test::Unit に Test::Tap を被せてみました - Tociyuki::Diary

    Ruby の添付ライブラリ test/unit は、Java のテスト・フレームワークを範にしているようで、煩雑で軽やかさがないのが難点です。なぜ、Perl のテスト・フレームワークに倣わなかったのか、Ruby の不思議の一つだと思っています。id:dankogai さんが不満を述べるのも、わかる気がします。 ⇒ 404 Blog Not Found:Ruby beyond Rails - 書評 - まるごとRuby! RubyPerlに比べて、余計なところでTMTOWTDIを発揮しているように思えてならない。それを一番強く感じるのがテストのフレームワークで、なんであんなに種類があるのかわからない。TAPでほぼ統一されているPerlの連帯感からすると、テスト一個のためにクラスを書かせるなんて、間違った傲慢(false form of hubris)にしか感じられないのだが。 もっとも、賢

    Test::Unit に Test::Tap を被せてみました - Tociyuki::Diary
  • 1