50 lines
1.1 KiB
Perl
50 lines
1.1 KiB
Perl
package DBM::Deep::Null;
|
|
|
|
use 5.008_004;
|
|
|
|
use strict;
|
|
use warnings FATAL => 'all';
|
|
|
|
=head1 NAME
|
|
|
|
DBM::Deep::Null - NULL object
|
|
|
|
=head1 PURPOSE
|
|
|
|
This is an internal-use-only object for L<DBM::Deep>. It acts as a NULL object
|
|
in the same vein as MARCEL's L<Class::Null>. I couldn't use L<Class::Null>
|
|
because DBM::Deep needed an object that always evaluated as undef, not an
|
|
implementation of the Null Class pattern.
|
|
|
|
=head1 OVERVIEW
|
|
|
|
It is used to represent null sectors in DBM::Deep.
|
|
|
|
=cut
|
|
|
|
use overload
|
|
'bool' => sub { undef },
|
|
'""' => sub { undef },
|
|
'0+' => sub { 0 },
|
|
('cmp' =>
|
|
'<=>' => sub {
|
|
return 0 if !defined $_[1] || !length $_[1];
|
|
return $_[2] ? 1 : -1;
|
|
}
|
|
)[0,2,1,2], # same sub for both ops
|
|
'%{}' => sub {
|
|
require Carp;
|
|
Carp::croak("Can't use a stale reference as a HASH");
|
|
},
|
|
'@{}' => sub {
|
|
require Carp;
|
|
Carp::croak("Can't use a stale reference as an ARRAY");
|
|
},
|
|
fallback => 1,
|
|
nomethod => 'AUTOLOAD';
|
|
|
|
sub AUTOLOAD { return; }
|
|
|
|
1;
|
|
__END__
|