Name : perl-Safe-Isa
| |
Version : 1.000010
| Vendor : openSUSE
|
Release : bp156.3.1
| Date : 2023-07-22 11:25:17
|
Group : Development/Libraries/Perl
| Source RPM : perl-Safe-Isa-1.000010-bp156.3.1.src.rpm
|
Size : 0.01 MB
| |
Packager : https://bugs_opensuse_org
| |
Summary : Call isa, can, does and DOES safely on things that may not be objects
|
Description :
How many times have you found yourself writing:
if ($obj->isa(\'Something\')) {
and then shortly afterwards cursing and changing it to:
if (Scalar::Util::blessed($obj) and $obj->isa(\'Something\')) {
Right. That\'s why this module exists.
Since perl allows us to provide a subroutine reference or a method name to the -> operator when used as a method call, and a subroutine doesn\'t require the invocant to actually be an object, we can create safe versions of isa, can and friends by using a subroutine reference that only tries to call the method if it\'s used on an object. So:
my $isa_Foo = $maybe_an_object->$_call_if_object(isa => \'Foo\');
is equivalent to
my $isa_Foo = do { if (Scalar::Util::blessed($maybe_an_object)) { $maybe_an_object->isa(\'Foo\'); } else { undef; } };
Note that we don\'t handle trying class names, because many things are valid class names that you might not want to treat as one (like say \"Matt\") - the \'is_module_name\' function from Module::Runtime is a good way to check for something you might be able to call methods on if you want to do that.
We are careful to make sure that scalar/list context is preserved for the method that is eventually called.
|
RPM found in directory: /vol/rzm3/linux-opensuse/distribution/leap/15.6/repo/oss/noarch |