The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

名前

Tie::Trace - tieで簡単printデバッギング

バージョン

Version 0.04

概要

    use Tie::Trace;
 
    my %hash;
    tie %hash, "Tie::Trace";
 
    $hash{hoge} = 'hogehoge'; # warn Hash => Key: hoge, Value: hogehgoe at ...
 
    my @array;
    tie @aray, "Tie::Trace";
    push @array, "array";    # warn Array => Point: 0, Value: array at ...
 
    my $scalar;
    tie $scalar, "Tie::Trace";
    $scalar = "scalar";      # warn Scalar => Value: scalar at ...

説明

Tie::Traceはprintでバッキングに有用です。tieを使って、特定の変数に 入れられた値を見ることが出来ます。

入れられた値が、スカラ/配列/ハッシュリファレンスであれば、 Tie::Traceは再帰的にその値をチェックできます。

例;

 tie %hash, "Tie::Trace";
 
 $hash{foo} = {a => 1, b => 2}; # warn ...
 $hash{foo}->{a} = 2            # warn ...

ですが、blessされたリファレンスやtieされた値は無視されます。

オプション

key => [values/regexs/coderef]
 tie %hash, "Tie::Trace", key => [qw/foo bar/];

これはハッシュのためのものです。チェックするキーの名前か、キーに対する正規表現を指定できます。 指定された/マッチしたキーでなければ、警告の対象にならず、無視されます。 コードリファレンスを指定した場合、コードリファレンスの第一引数は、tieされた値で、第二引数以降は値です。 コードリファレンスが偽を返した場合、無視されます。

例;

 tie %hash, "Tie::Trace", key => [qw/foo bar/, qr/x/];
 
 $hash{foo} = 1 # warn ...
 $hash{bar} = 1 # warn ...
 $hash{var} = 1 # *no* warnings
 $hash{_x_} = 1 # warn ...
value => [contents/regexs/coderef]
 tie %hash, "Tie::Trace", value => [qw/foo bar/];

チェックする値の内容か、値に対する正規表現を指定できます。 指定された/マッチした値でなければ、警告の対象にならず、無視されます。 コードリファレンスを指定した場合、コードリファレンスの第一引数は、tieされた値で、第二引数以降は値です。 コードリファレンスが偽を返した場合、無視されます。

例;

 tie %hash, "Tie::Trace", value => [qw/foo bar/, qr/\)/];
 
 $hash{a} = 'foo'  # warn ...
 $hash{b} = 'foo1' # *no* warnings
 $hash{c} = 'bar'  # warn ...
 $hash{d} = ':-)'  # warn ...
use => [qw/hash array scalar/]
 tie %hash, "Tie::Trace", use => [qw/array/];

チェックする変数のタイプ(スカラー、配列、ハッシュ)を指定します。 デフォルトでは、全てのタイプがチェックされます。

例;

 tie %hash, "Tie::Trace", use => [qw/array/];
 
 $hash{foo} = 1         # *no* warnings
 $hash{bar} = 1         # *no* warnings
 $hash{var} = []        # *no* warnings
 push @{$hash{var}} = 1 # warn ...
debug => 'dumper'/coderef
 tie %hash, "Tie::Trace", debug => 'dumper'
 tie %hash, "Tie::Trace", debug => sub{my($self, @v) = @_; return @v }

値の表現を指定できます. デフォルトではただのスカラとして表現されます。 "dumper" もしくは、 コードリファレンスを使えます。"dumper" は、Data::Dumper::Dumperを値にかけた結果になります。 コードリファレンスを指定した場合、コードリファレンスの第一引数は、tieされた値で、第二引数以降は値です。 コードリファレンスの実行結果が表示用の値として使われます。

debug_value => [contents/regexs/codref]
 tie %hash, "Tie::Trace", debug => sub{my($s,$v) = @_; $v =~tr/op/po/;}, debug_value => [qw/foo boo/];

valueは値に対するものでしたが、debug_valueは、debugにより加工された後の値に対するものです。 コードリファレンスを指定した場合、コードリファレンスの第一引数は、tieされた値で、第二引数以降は値です。 コードリファレンスが偽を返した場合、無視されます。

例;

 tie %hash, "Tie::Trace", debug => sub{my($s,$v) = @_; $v =~tr/op/po/;}, debug_value => [qw/foo boo/];
 
 $hash{a} = 'fpp'  # warn ...      because debugged value is foo
 $hash{b} = 'foo'  # *no* warnings because debugged value is fpp
 $hash{c} = 'bpp'  # warn ...      because debugged value is boo
r => 0/1
 tie %hash, "Tie::Trace", r => 0;

rが0であれば、リファレンスが入ってきた場合に、再帰的にチェックしません。デフォルトは、1です。

caller => number/[numbers]
 tie %hash, "Tie::Trace", caller => 2;

これは、警告メッセージに影響します。callerが遡る数を指定します。 デフォルトは0です。0より大きくすると、その分遡ります。

配列リファレンスを指定することも出来ます。

 tie %hash, "Tie::Trace", caller => [1, 2, 3];

下記のような表示になります。

 Hash => Key: key, Value:hoge at filename line 61.
 at filename line 383.
 at filename line 268.

METHODS

key、 value、 debug_valueなどのオプションに渡されるコードリファレンスで使われます。 tied 関数の戻り値のメソッドとして使われます。

storage
 tie %hash, "Tie::Trace", debug =>
   sub {
     my($self, $v) = @_;
     my $storage = $self->storage;
     return $storage;
   };

値が蓄えられているリファレンスを返します。

parent
 tie %hash, "Tie::Trace", debug =>
   sub {
     my($self, $v) = @_;
     my $parent = $self->parent->storage;
     return $parent;
   };

このメソッドは、$selfの親のtieされている値を返します。

for example;

 tie my %hash, "Tie::Trace";
 my %hash2;
 $hash{1} = \%hash2;
 my $tied_hash2 = tied %hash2;
 print tied %hash eq $tied_hash2->parent; # 1

著者

Ktat, <atusi at pure.ne.jp>

バグ

Please report any bugs or feature requests to bug-tie-debug at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Tie-Trace. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

サポート

perldocコマンドでこのモジュールのドキュメントを見つけられます。

    perldoc Tie::Trace

日本語のドキュメント(euc-jp)は下記になります。

    perldoc Tie::Trace_JP

また、下記からも情報を見ることが出来ます:

COPYRIGHT & LICENSE

Copyright 2006 Ktat, all rights reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.