in reply to Re^6: Syntax for casting map to a hash or an array
in thread Syntax for casting map to a hash or an array

The first two work. In the upper, an anoymous hash is constructed with map's output, in the lower, an anonymous array. In each case, Dumper just get's passed the reference and dereferences it.

These two work but NOT for the same reason, because there's an extra layer of ref->hash->ref going on?
say Dumper(\@{ {map { $_ => 'fish' } qw(one two red blue)} } );

This one doesn't work, because the code is trying to dereference the anonymous hash as an array (@{ }).

The next one is just like the upper one from the former code block.

perl -le'print map{pack c,($-++?1:13)+ord}split//,ESEL'

Replies are listed 'Best First'.
Re^8: Syntax for casting map to a hash or an array
by cbeckley (Curate) on Apr 05, 2017 at 19:14 UTC

    Ugh, right, that was a typo. I was trying to compare these two lines.

    say Dumper(\%{ {map { $_ => 'fish' } qw(one two red blue)} } ); say Dumper({map { $_ => 'fish' } qw(one two red blue)});

    Thank you for the correction.

    Thanks,
    cbeckley

      Yes, these two are exactly the same, except for one gratitous reference-dereference round trip.

      If you dereference a reference and take a reference to the dereferenced reference, this reference will be the same as the original reference.

      #!/usr/bin/perl -l $h = {map { $_ => 'fish' } qw(one two red blue)}; print $h; print \%{$h}; print \%{\%{$h}}; print \%{\%{\%{$h}}}; print \%{\%{\%{\%{$h}}}}; print \%{\%{\%{\%{\%{$h}}}}}; print \%{\%{\%{\%{\%{\%{$h}}}}}}; print \%{\%{\%{\%{\%{\%{\%{$h}}}}}}}; print \%{\%{\%{\%{\%{\%{\%{\%{$h}}}}}}}}; __END__ HASH(0x17ea548) HASH(0x17ea548) HASH(0x17ea548) HASH(0x17ea548) HASH(0x17ea548) HASH(0x17ea548) HASH(0x17ea548) HASH(0x17ea548) HASH(0x17ea548)

      Sorry for so may ref-deref, couldn't stop... %-)

      perl -le'print map{pack c,($-++?1:13)+ord}split//,ESEL'
        "If you dereference a reference and take a reference to the dereferenced reference, this reference will be the same as the original reference."

        LOL :) It took me a lot of years coding Perl before I would have been able to understand exactly what's being said there. If one can grasp that, along with the actual syntax to do it, one can do anything.

        It was my bad originally to claim they both work for different reasons. *That* was kind of a typo as well. I was thinking too far ahead at the time ;)