perlquestion
molecules
<p>Dear Perlmonks,</p>
<p>I wanted a defined-or function that works on Perls before 5.10. I tried to find something like it but "defined" and "or" are such common words, I finally gave up searching.</p>
<p>I submitted this RFC to modules@perl.org but did not get any responses.</p>
<p>To illustrate its use, here are some results copied from running my test file.</p>
<pre>
ok 1 - 0 = defined_or( undef, 0);
ok 2 - 0 = defined_or( 0, undef);
ok 3 - 0 = defined_or( undef, defined_or( undef, 0));
ok 4 - 1 = defined_or( undef, 1);
ok 5 - 1 = defined_or( 1, undef);
ok 6 - 1 = defined_or( undef, defined_or( undef, 1));
ok 7 - undef = defined_or( undef, undef);
ok 8 - undef = defined_or( undef, undef);
ok 9 - undef = defined_or( undef, defined_or( undef, undef));
ok 10 - 1 = defined_or( 1, 0);
ok 11 - 0 = defined_or( 0, 1);
ok 12 - 1 = defined_or( 1, 1);
ok 13 - 1 = defined_or( 1, 1);
</pre>
<p>And the POD:</p>
<pre>
SYNOPSIS
use DefinedOr qw/ defined_or /;
my $foo = defined_or( shift(), 1);
my $bar = defined_or( $baz, defined_or( $boo, 1));
Description
This is a simple implementation of defined/or (without the beautifully
simple syntax) for those that are not using Perl 5.10 for some reason.
EXPORTED SUBROUTINES
defined_or
This subroutine takes two arguments. It returns the first argument if it
is defined. Otherwise, it returns the second argument.
Yes, this is actually a subroutine, not pretty syntax like <c>//</c>.
INCOMPATIBILITIES
None reported.
BUGS
None have been reported as of the current release. Please report any
bugs to bug-definedor@rt.cpan.org.
LIMITATIONS
Currently runs fine on Perl 5.8.8. If someone wants to try it on older
Perls, then delete the line that says <c>use 5.008;</c>. If you do,
please let me know what version of Perl you're running it on.
AUTHOR
Christopher Bottoms, "<molecules at cpan.org>"
ACKNOWLEDGEMENTS
Thanks to all those who developed the true defined-or for Perl 6 and
Perl 5.10. This is a weak imitation.
LICENSE AND COPYRIGHT
This program is free software; you can redistribute it and/or modify it
under the terms of either: the GNU General Public License as published
by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.
Copyright 2010 Christopher Bottoms.
</pre>
<p>What do you think?</p>
<p>Thanks!</p>