I'm waiting eagerly for the "defined-or" operator in Perl 5.10
$val = expr1 // expr2 ;
$val //= expr;
$some_hash{some_key} =? expr;
my $tmp;
$tmp = expr and $some_hash{some_key} = $tmp;
$tmp = ... and ..
,
but that's ugly ... any more clever idiom, anybody ?
Re:The pumpking advice
dami on 2007-05-22T21:15:59
> What would be the return value of =? ?
Just what I wrote in original post : ($x =? expr) would mean
($tmp = expr and $x = $tmp)
> What would "$x = $y =? $z" do ?
$x = ($tmp = $z and $y = $tmp)
so if $z is false, $y is untouched and $x is false, whereas with
"$x =? $y =? $z"
both $x and $y stay untouched if $z is false
eval { $some_hash{some_key} = ( expr or die ) };
$_ = expr or $_ for $some_hash{some_key};
Re:Easily done already.
dami on 2007-05-22T21:08:51
> eval { $some_hash{some_key} = ( expr or die ) };
this would catch exceptions raised inexpr
.
> $_ = expr or $_ for $some_hash{some_key};
well, not many readers would quickly guess that we are assigning something in the hash hereRe:Easily done already.
Aristotle on 2007-05-23T23:23:09
My suggestions were actually tongue-in-cheek, particularly the
eval
-based one. I would never write code like that.But it occurs to me that you can just as well arrange the aliasing in #2 the other way around:
$_ and $foo{bar} = $_ for $baz;Unlike my previous suggestion this also avoids the unnecessary assignment in case the expression is false. I might actually use this in real code, although I would probably not write it with
for ( expr ) { $foo{bar} = $_ if $_ }if
and afor
construct rather than thefor
modifier.This is pretty easy to read.
sub update { $_[0] = $_[1] if $_[1]; $_[1] }