|
NAMEPerlX::Maybe - return a pair only if they are both definedSYNOPSISYou once wrote:my $bob = Person->new( defined $name ? (name => $name) : (), defined $age ? (age => $age) : (), ); Now you can write: use PerlX::Maybe; my $bob = Person->new( maybe name => $name, maybe age => $age, ); DESCRIPTIONMoose classes (and some other classes) distinguish between an attribute being unset and the attribute being set to undef. Supplying a constructor arguments like this:my $bob = Person->new( name => $name, age => $age, ); Will result in the "name" and "age" attributes possibly being set to undef (if the corresponding $name and $age variables are not defined), which may violate the Person class' type constraints. (Note: if you are the author of the class in question, you can solve this using MooseX::UndefTolerant. However, some of us are stuck using non-UndefTolerant classes written by third parties.) To ensure that the Person constructor does not try to set a name or age at all when they are undefined, ugly looking code like this is often used: my $bob = Person->new( defined $name ? (name => $name) : (), defined $age ? (age => $age) : (), ); or: use PerlX::Maybe; my $bob = Person->new( (name => $name) x!!(defined $name), (age => $age) x!!(defined $age), ); A slightly more elegant solution is the "maybe" function. Functions
XS BackendIf you install PerlX::Maybe::XS, a faster XS-based implementation will be used instead of the pure Perl functions. My basic benchmarking experiments seem to show this to be around 30% faster.Currently there are no XS implementations of the "provided_deref" and "provided_deref_with_maybe" functions. Contributions welcome. EnvironmentThe environment variable "PERLX_MAYBE_IMPLEMENTATION" may be set to "PP" to prevent the XS backend from loading.ExportingOnly "maybe" is exported by default. You can request other functions by name:use PerlX::Maybe "maybe", "provided"; Or to export everything: use PerlX::Maybe ":all"; If Exporter::Tiny is installed, you can rename imports: use PerlX::Maybe "maybe" => { -as => "perhaps" }; BUGSPlease report any bugs to <http://rt.cpan.org/Dist/Display.html?Queue=PerlX-Maybe>.SEE ALSOSyntax::Feature::Maybe, PerlX::Maybe::XS.MooseX::UndefTolerant, PerlX::Perform, Exporter. AUTHORToby Inkster <tobyink@cpan.org>."provided_deref" and "provided_deref_with_maybe" by Theo van Hoesel. COPYRIGHT AND LICENCEThis software is copyright (c) 2012-2013, 2018 by Toby Inkster.This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. DISCLAIMER OF WARRANTIESTHIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
Visit the GSP FreeBSD Man Page Interface. |