Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re^2: Multi-dimensional constants (updated)

by Ionic (Acolyte)
on Nov 22, 2020 at 07:33 UTC ( [id://11124007]=note: print w/replies, xml ) Need Help??


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

I'm not sure exactly what you're going for, but maybe this helps …
Thanks. It looks like I was thrown off by Data::Dumper not dereferencing the subroutine references and instead returning something weird, and also the general need to dereference the subroutine references in other code. Other than that, my idea seems to have been spot-on.

Update 2: The syntax &{(MODES)[0]} also works, and you may consider it more elegant …
I would, yes. However, this example snippet will return a syntax error (near ")["):
my $tmp = 42 + (&((MODES)[1])())[1];
The same goes for:
my $tmp = 42 + (&((MODES)[1]))[1];
Luckily, it can be worked around using:
my $tmp_ref = (MODES)[1]; my $tmp = 42 + (&$tmp_ref())[1];
I don't quite understand why the interpreter trips, but since it's easy to work around it using a temporary variable, I wanted to leave that here for reference as well.

Replies are listed 'Best First'.
Re^3: Multi-dimensional constants (updated)
by AnomalousMonk (Archbishop) on Nov 22, 2020 at 07:56 UTC
    ... 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:  <%-{-{-{-<

      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.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11124007]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others musing on the Monastery: (3)
As of 2024-03-29 06:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found