Initial Commit
This commit is contained in:
49
database/perl/vendor/lib/DBM/Deep/Null.pm
vendored
Normal file
49
database/perl/vendor/lib/DBM/Deep/Null.pm
vendored
Normal file
@@ -0,0 +1,49 @@
|
||||
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__
|
||||
Reference in New Issue
Block a user