今日出会ったCPANモジュール

これはまた便利というか面白いモジュール。

Perl には wantarray という組み込み関数がある。
これは,メソッドの呼出し側が戻り値としてリストコンテキストを要求しているのか判定する時に使用する。


Contextual::Return モジュールはリストだけでなく,呼出し側が要求している戻り値のコンテキストを色々と判定できる。

# SYNOPSIS 
 
use Contextual::Return;
use Carp;

sub foo {
    return
        SCALAR { 'thirty-twelve' }
        BOOL   { 1 }
        NUM    { 7*6 }
        STR    { 'forty-two' }

        LIST   { 1,2,3 }

        HASHREF   { {name => 'foo', value => 99} }
        ARRAYREF  { [3,2,1] }

        GLOBREF   { \*STDOUT }
        CODEREF   { croak "Don't use this result as code!"; }
    ;
}

# and later...

if (my $foo = foo()) {
    for my $count (1..$foo) {
        print "$count: $foo is:\n"
            . "    array: @{$foo}\n"
            . "    hash:  $foo->{name} => $foo->{value}\n"
            ;
    }
    print {$foo} $foo->();
}

このモジュールの作者は,Damian Conway 先生であった。

http://b.hatena.ne.jp/{はてなID}/favorite.rss 空!空!空!空〜

以下の問題は,2008/11/27現在解消されましたのでご注意下さい。

(以下,古い記事)
昨日から新しくなった,はてなブックマークを早速利用しているのだが...

はてなブックマークのお気に入りのフィードの内容が何故か空なのだが...

http://b.hatena.ne.jp/h3x/favorite.rss

な・ぜ・だ!?

お気に入りはいくつか登録してあるのに

http://b.hatena.ne.jp/h3x/favorite

スリープ処理

Perlの組み込み sleep 関数は,スリープ時間を浮動小数点で指定した場合であっても,整数単位の秒数でのみ,プログラムを一時停止するらしい。

sleep 1.5; # sleep(int(1.5))と同じで,1秒間スリープする
sleep 0.5; # sleep(int(0.5))と同じで,0秒間スリープする!

1秒未満のスリープを実現するには,Perl5.8以降で標準モジュールとなっている Time::HiRes モジュールを利用すればよいらしい。

use Time::HiRes qw( sleep usleep );
sleep  0.5;     # 0.5秒間スリープする
usleep 500_001; # 0.500001秒間スリープする (ミリ秒単位で指定できる)


See Also

今日出会ったCPANモジュール

このモジュールを使用すると,サブルーチンから返される値をすべて記憶し,次回サブルーチンが同じ引数で呼び出されたときに,同じ値を(再計算せずに)直ちに返してくれるようになる。

# SYNOPSIS

use Memoize;
memoize('slow_function');
slow_function(arguments);    # Is faster than it was before


このモジュールの作者はかの有名な MJD でした。

Higher-Order Perl: Transforming Programs with Programs

Higher-Order Perl: Transforming Programs with Programs

正規表現

オプションのメモ

  • 「x」オプション
    • 空白文字が無視される
    • コメントを挿入できる
    • 空白を使いたいときは,\でエスケープする
    • # を使いたいときは,\でエスケープする
  • 「m」オプション
    • ^ や $ のアンカーが複数行に対応する
  • 「s」オプション
    • . (ドット)が改行文字にもマッチするようになる

アンカーのメモ

アンカー 意味
^ 行頭
$ 行末
\A 入力の先頭
\Z 最後の行末文字を除く入力の末尾
\z 入力の末尾

miyagawa さん products の remedie を使ってみた

  • まず,ソースを取ってくる。
svn checkout http://remedie.googlecode.com/svn/trunk/
  • remedie/HACKING を読む。必要な事は全て書かれている。
  • 依存モジュールを以下のコマンドで調べてインストールする。
ack -h ^use lib | sort -u | perl -Ilib
  • 以下のコマンドで,SQLite の DB を初期化する。
perl -Ilib -MRemedie::DB::Schema -e 'Remedie::DB::Schema->install'
  • DBの初期化が済んだら,以下のコマンドでサーバを起動する。
perl -Ilib ./bin/remedie-server.pl
  • "Can't load subscription" とか表示された場合は,~/.remedie/error.log にエラー内容が出力されていなか確認する。おそらく依存モジュールが見つからない等のエラーメッセージが書かれているはず。

参考