SEARCH
NEW RPMS
DIRECTORIES
ABOUT
FAQ
VARIOUS
BLOG

 
 

perl-Class-Null rpm build for : openSUSE Tumbleweed. For other distributions click perl-Class-Null.

Name : perl-Class-Null
Version : 2.110.730 Vendor : obs://build_opensuse_org/devel:languages:perl
Release : 1.6 Date : 2024-03-12 18:02:11
Group : Unspecified Source RPM : perl-Class-Null-2.110.730-1.6.src.rpm
Size : 0.03 MB
Packager : (none)
Summary : Implements the Null Class design pattern
Description :
This class implements the Null Class design pattern.

Suppose that methods in your object want to write log messages to a log
object. The log object is possibly stored in a slot in your object and can
be accessed using an accessor method:

package MyObject;

use base \'Class::Accessor\';
__PACKAGE__->mk_accessors(qw(log));

sub do_it {
my $self = shift;
$self->log->log(level => \'debug\', message => \'starting to do it\');
...
$self->log->log(level => \'debug\', message => \'still doing it\');
...
$self->log->log(level => \'debug\', message => \'finished doing it\');
}

The log object simply needs to have a \'log()\' method that accepts two named
parameters. Any class defining such a method will do, and \'Log::Dispatch\'
fulfills that requirement while providing a lot of flexibility and
reusability in handling the logged messages.

You might want to log messages to a file:

use Log::Dispatch;

my $dispatcher = Log::Dispatch->new;

$dispatcher->add(Log::Dispatch::File->new(
name => \'file1\',
min_level => \'debug\',
filename => \'logfile\'));

my $obj = MyObject->new(log => $dispatcher);
$obj->do_it;

But what happens if we don\'t define a log object? Your object\'s methods
would have to check whether a log object is defined before calling the
\'log()\' method. This leads to lots of unwieldy code like

sub do_it {
my $self = shift;
if (defined (my $log = $self->log)) {
$log->log(level => \'debug\', message => \'starting to do it\');
}
...
if (defined (my $log = $self->log)) {
$log->log(level => \'debug\', message => \'still doing it\');
}
...
if (defined (my $log = $self->log)) {
$log->log(level => \'debug\', message => \'finished doing it\');
}
}

The proliferation of if-statements really distracts from the actual call to
\'log()\' and also distracts from the rest of the method code. There is a
better way. We can ensure that there is always a log object that we can
call \'log()\' on, even if it doesn\'t do very much (or in fact, anything at
all).

This object with null functionality is what is called a null object. We can
create the object the usual way, using the \'new()\' constructor, and call
any method on it, and all methods will do the same - nothing. (Actually, it
always returns the same \'Class::Null\' singleton object, enabling method
chaining.) It\'s effectively a catch-all object. We can use this class with
our own object like this:

package MyObject;

use Class::Null;



sub init {
my $self = shift;
...
$self->log(Class::Null->new);
...
}

sub do_it {
my $self = shift;
$self->log->log(level => \'debug\', message => \'starting to do it\');
...
$self->log->log(level => \'debug\', message => \'still doing it\');
...
$self->log->log(level => \'debug\', message => \'finished doing it\');
}

This is only one example of using a null class, but it can be used whenever
you want to make an optional helper object into a mandatory helper object,
thereby avoiding unnecessarily complicated checks and preserving the
transparency of how your objects are related to each other and how they
call each other.

Although \'Class::Null\' is exceedingly simple it has been made into a
distribution and put on CPAN to avoid further clutter and repetitive
definitions.

RPM found in directory: /packages/linux-pbone/ftp5.gwdg.de/pub/opensuse/repositories/devel:/languages:/perl/openSUSE_Tumbleweed/noarch

Content of RPM  Changelog  Provides Requires

Download
ftp.icm.edu.pl  perl-Class-Null-2.110.730-1.6.noarch.rpm
     

Provides :
perl(Class::Null)
perl-Class-Null

Requires :
perl(:MODULE_COMPAT_5.40.0)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(PayloadIsZstd) <= 5.4.18-1


Content of RPM :
/usr/lib/perl5/vendor_perl/5.40.0/Class
/usr/lib/perl5/vendor_perl/5.40.0/Class/Null.pm
/usr/share/doc/packages/perl-Class-Null
/usr/share/doc/packages/perl-Class-Null/Changes
/usr/share/doc/packages/perl-Class-Null/README
/usr/share/licenses/perl-Class-Null
/usr/share/licenses/perl-Class-Null/LICENSE
/usr/share/man/man3/Class::Null.3pm.gz

 
ICM