in reply to RFC: "assignary" operator ?= :

G'day richard.sharpe,

$var ?= "something" : "something else";

I suspect something along these lines would do what you want using existing syntax:

$var = ("something else", "something")[!!$var];

Some examples:

$ perl -E 'my $x; $x = (0,1)[!!$x]; say $x' 0 $ perl -E 'my $x = ""; $x = (0,1)[!!$x]; say $x' 0 $ perl -E 'my $x = "X"; $x = (0,1)[!!$x]; say $x' 1

From "Re^2: RFC: "assignary" operator ?= :":

$var1 ?= die "ERROR: \$var1 already set." : $var2;

You could do something rather exotic like:

$ perl -E 'my $x = ""; $x = (42, $x && die "Set: $x")[!!$x]; say $x' 42 $ perl -E 'my $x = "X"; $x = (42, $x && die "Set: $x")[!!$x]; say $x' Set: X at -e line 1.

But ask yourself:

— Ken

Replies are listed 'Best First'.
Re^2: RFC: "assignary" operator ?= :
by Anonymous Monk on Dec 09, 2019 at 07:01 UTC
    $var is repeated thus missing the point