in reply to Re^2: Multi-dimensional constants (updated)
in thread Multi-dimensional constants

... this example snippet will return a syntax error (near ")["):

my $tmp = 42 + (&((MODES)[1])())[1];

The brackets associated with the & sigil are curlies not parentheses.

Win8 Strawberry 5.8.9.5 (32) Sun 11/22/2020 2:47:09 C:\@Work\Perl\monks >perl use strict; use warnings; use constant ADD_DATA => qw(add 1); use constant REMOVE_DATA => qw(remove 2); use constant MODES => (\&ADD_DATA, \&REMOVE_DATA); print 42 + (&{ (MODES)[0] })[1]; ^Z 43
But I don't know if this is exactly elegant!


Give a man a fish:  <%-{-{-{-<

Replies are listed 'Best First'.
Re^4: Multi-dimensional constants (updated)
by Ionic (Acolyte) on Nov 22, 2020 at 08:09 UTC

    The brackets associated with the & sigil are curlies not parentheses.
    Ah, right, that works, and here's the explanation from perlref:
    Anywhere you'd put an identifier (or chain of identifiers) as part of a variable or subroutine name, you can replace the identifier with a BLOCK returning a reference of the correct type.