http://www.perlmonks.org?node_id=564815


in reply to Re^2: Secret Perl Operators: the boolean list squash operator, x!!
in thread Secret Perl Operators: the boolean list squash operator, x!!

He probably means something like this:

exists $hash{ foo } && exists $hash{ foo }{ bar } ? $hash{ foo }{ bar +} : ()

In this case, switching to x!! will cause $hash{ foo }{ bar } to always be evaluated, which will cause $hash{ foo } to be autovivified even if the condition is false.

Makeshifts last the longest.

  • Comment on Re^3: Secret Perl Operators: the boolean list squash operator, x!!
  • Download Code

Replies are listed 'Best First'.
Re^4: Secret Perl Operators: the boolean list squash operator, x!!
by Jenda (Abbot) on Jul 31, 2006 at 17:44 UTC

    I see. Actually to prevent confusion ... even this would autovivify:

    @a = ( $hash{foo}{bar} x!! 0);
    I guess we'd need to "fix" the x operator to not evaluate the lefthand operator if the righthand one is <=0.

Re^4: Secret Perl Operators: the boolean list squash operator, x!!
by eric256 (Parson) on Jul 31, 2006 at 17:47 UTC

    Update: Never mind, i see it now ;P)

    Why would that be trouble?

    use strict; use warnings; use Data::Dumper; my $hash = { test => 1}; print Dumper($hash); print "Hello\n" x!! exists($hash->{test}); print Dumper($hash); print "One More\n" x!! exists($hash->{test2}) && exists($hash->{test2} +->{Dude}); print Dumper($hash);

    That works as expected and doesn't autovivify anything...did I miss something?


    ___________
    Eric Hodges