[Pdx-pm] the quest for return_if

Austin Schutz tex at off.org
Tue Jun 26 21:28:46 PDT 2007


On Tue, Jun 26, 2007 at 05:57:19PM -0700, Eric Wilhelm wrote:
> # from benh
> # on Tuesday 26 June 2007 05:17 pm:
> 
> >Ideally I would love to do this:
> >
> >sub return_if {
> >   my ($eval, $value) = @_;
> >   $value = $eval if !defined($value);
> >   {FROM_THE_POINT_WHERE_I_WAS_CALLED}->return $value if
> > defined($eval); }
> 
> That's not exactly clear.  Are you trying to return the value if it is 
> defined?  That is, you're trying to get away from two-line things like:
> 
>   my $val = answer($param);
>   return($val) if(defined($val));
> 
> ?
> 
> Yeah, that could be tighter, but I don't recall ever being bothered by 
> it (then again, I'm not looking at ten pages of them, are you?)
> 
> The opposite is pretty concise:
> 
>   return() unless(defined(my $val = answer($param)));
> 

	I believe the intent is to do something like

assert( test() ); 

	and be able to have the return portion automatic. If you understand
what is meant it is far more concise. But the language doesn't cleanly
support it- which may be a boon, since it would be surprising behavior.  I had
at one point had the same wish, but something that fundamental to the
operation of the interpreter would be very hard to bolt on cleanly. Well,
unless you are a lot more clever than I am.

	If true/false will work for you, you can distill it to a simple test
case:

	assert( test() ) or return;

	If testing defined():

	defined(assert(test())) or return;


	Basically all variations on the theme of Eric's response.


	Austin


More information about the Pdx-pm-list mailing list