Perlで書く  RSSを登録する

Perlに関するTipsや関数の使い方を紹介します。

最新号をメルマガでお届けします    
登録 解除

規約に同意して

登録した方には、まぐまぐの公式メルマガ(無料)をお届けします。
2008/11/16

Perlで書く 2008.11.16 Vol.222

=====================================================================
Perlで書く 2008.11.16 Vol.222
[WAZA]関数処理をラップする
http://www2u.biglobe.ne.jp/~MAS/perl/
=====================================================================
●関数処理をラップする

 Hook::LexWrapモジュールを使うと、関数を書き換えずに関数の前後に
処理を挿入したり、関数の返値を変更することができます。

---------------------------------------------------------------------
# 前後に処理を挿入する
use strict;
use warnings;
use Hook::LexWrap;

wrap 'foo',
    pre => sub { print "前処理\n"; },
    post => sub { print "後処理\n"; };

foo();
bar();

sub foo {
    print "foo()\n";
}

sub bar {
    print "bar()\n";
}

__END__
[実行結果]
前処理
foo()
後処理
bar()
---------------------------------------------------------------------
# 処理の横取り
use strict;
use warnings;
use Hook::LexWrap;

wrap 'foo',
    pre => sub {
        my ($value) = @_;
        # $_[-1]に値を設定すると処理を横取りできます
        $_[-1] = "$valueは奇数" if $value % 2 != 0;
    };

foreach my $i (1..5) {
    print foo($i), "\n";
}

sub foo {
    my $value = shift;
    return "$valueです";
}

__END__
[実行結果]
1は奇数
2です
3は奇数
4です
5は奇数
---------------------------------------------------------------------
# 返値の書き換え
use strict;
use warnings;
use Hook::LexWrap;

wrap 'foo',
    post => sub {
        # $_[-1]に値を設定すると返値を書き換えます
        # 呼び出しがリストコンテキストの場合
        # $_[0]に返値のリストのリファレンスが入ります
        if (ref $_[0] eq 'ARRAY') {
            $_[-1] = $_[0]->[0] . "です";
        } else {
            $_[-1] = $_[0] . "です";
        }
    };

foreach my $i (1..5) {
    print foo($i), "\n";
}

sub foo {
    my $value = shift;
    return $value;
}

__END__
[実行結果]
1です
2です
3です
4です
5です
---------------------------------------------------------------------

●関連項目

・トレース表示
  http://www2u.biglobe.ne.jp/~MAS/perl/waza/trace.html

=====================================================================
■雑記

 手を動かして覚える正規表現の置換処理編(*1)とリファレンス(*2)を公開
しました。
 ATOKからPerlやRubyのプログラムを実行できるようになりました(*3)。
アイデア次第で面白いことができそうです。

*1 http://books.ivory.ne.jp/regexp/replace.html
*2 http://books.ivory.ne.jp/regexp/reference.html
*3 http://atok.com/useful/developer/api/index.html

=====================================================================
Perlで書く(マガジンID:0000109251) 配信数:852
発行者:MAS
本メールマガジンに関するご意見・お問い合わせは
t-masuda@mvd.biglobe.ne.jp までお寄せ下さい。

解除 http://www2u.biglobe.ne.jp/~MAS/perl/magazine.html
検索 http://www2u.biglobe.ne.jp/~MAS/perl/search/index.html
バックナンバー http://archive.mag2.com/0000109251/index.html
RSS  http://archive.mag2.com/0000109251/rss10.xml

本メールマガジンは「まぐまぐ」 http://www.mag2.com/ を利用して発行
しています。
=====================================================================
最新号をメルマガでお届け
登録 解除

規約に同意して

登録した方には、まぐまぐの公式メルマガ(無料)をお届けします。

最近の記事

上へ戻る