Data-Util

 view release on metacpan or  search on metacpan

lib/Data/Util/JA.pod  view on Meta::CPAN


=back

=head2 Error handling

検証関数によって放出される致命的エラーは,C<Data::Util::Error>モジュールによって変更することができます。

	package Foo;
	use Data::Util::Error sub{ Foo::InvalidArgument->throw(@_) };
	use Data::Util qw(:validate);

	# ...

このエラーハンドラはパッケージ毎に設定され,そのパッケージ内でC<Data::Util>が発生させるエラーにはそのエラーハンドラが使われます。

=head1 DISCUSSIONS

=head1 What is a X-reference?

「Xのリファレンス」とは何を指すのでしょうか。ここではハッシュリファレンスを例にとって考えます。
まず,判断要素は以下の3つを想定します。

=over 4

=item 1

C<ref($x) eq 'HASH'>

=item 2

C<Scalar::Util::reftype($x) eq 'HASH'>

=item 3

C<overload::Method($x, '%{}')>

=back

C<ref()>は非常に高速なので,実用上はこれで事足りることが多いと思われます。しかし,これはオーバーロードマジックを考慮しません。

C<reftype()>を使うべきではありません。$xがオブジェクトである場合,オブジェクトの実装型を参照し,カプセル化を壊してしまうことになるからです。

そしてC<overload::Method>が捕捉するのは,オブジェクトをある型のリファレンスとみなしてよい特殊なケースです。

なお,直接$xをハッシュリファレンスとみなして参照すること(C<< $x->{$key} >>)は避けるべきです。これは$xがハッシュリファレンスでない場合に正しく致命的エラーを発生させますが,ブãƒ...

さて,それではC<is_hash_ref()>は何を調べればいいのでしょうか。回答の一つはC<Params::Util>が示しています。Version 0.35の時点では,C<P::U::_HASH>は(1)を,C<P::U::_HASHLIKE>は(2)と(3)をチェックしまã...

したがって,C<is_hash_ref()>ではC<ref()>とC<overload::Method()>を使ってリファレンスの型を調べます。C<is_scalar_ref()>,C<is_array_ref()>,C<is_code_ref()>,C<is_glob_ref()>も同様です。

=head1 ENVIRONMENT VARIABLES

=head2 DATA_UTIL_PUREPERL

真であれば,Pure Perl版のバックエンドが使われます。

=head1 DEPENDENCIES

Perl 5.10 or later.

=head1 BUGS AND LIMITATIONS

No bugs have been reported.

Please report any bugs or feature requests to the author.

=head1 SEE ALSO

L<overload>.

L<Scalar::Util>.

L<Class::MOP>.

このモジュールのいくつかの機能は以下のモジュールの機能をXSに移植して
最適化したものであり,またいくつかはそれに加えて更に拡張を施したものです。

L<Params::Util>.

L<Sub::Install>.

L<Sub::Identify>.

L<Sub::Delete>.

L<Sub::Curry>.

L<Class::Method::Modifiers>.

L<Data::OptList>.

=head1 AUTHOR

Goro Fuji (gfx) E<lt>gfuji(at)cpan.orgE<gt>

=head1 LICENSE AND COPYRIGHT

Copyright (c) 2008-2009, Goro Fuji (gfx) E<lt>gfuji(at)cpan.orgE<gt>. Some rights reserved.

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

=cut



( run in 0.761 second using v1.01-cache-2.11-cpan-39bf76dae61 )