Yet Another syntactic variation would be something like:
Win8 Strawberry 5.8.9.5 (32) Sun 11/22/2020 3:11:34 C:\@Work\Perl\monks >perl -l use strict; use warnings; BEGIN { my %ops = ( ADD_DATA => [ qw(add 1) ], REMOVE_DATA => [ qw(remove 2) ], ); sub valid (*) { return exists $ops{$_[0]}; } sub modes (*) { return valid($_[0]) ? [ @{ $ops{$_[0]} } ] : die "bad '$_[0]'" +; } } print 42 + modes(ADD_DATA) ->[1]; print 'foo' . modes('REMOVE_DATA')->[0]; print 'invalid' if not valid(yyy); print modes('xxx'); ^Z 43 fooremove invalid bad 'xxx' at - line 11.
If you don't like arrow notation and prefer something like (...)[n], then:
Win8 Strawberry 5.8.9.5 (32) Sun 11/22/2020 3:14:57 C:\@Work\Perl\monks >perl -l use strict; use warnings; BEGIN { my %ops = ( ADD_DATA => [ qw(add 1) ], REMOVE_DATA => [ qw(remove 2) ], ); sub valid (*) { return exists $ops{$_[0]}; } sub modes (*) { return valid($_[0]) ? @{ $ops{$_[0]} } : die "bad '$_[0]'"; } } print 42 + (modes ADD_DATA) [1]; print 'foo' . (modes 'REMOVE_DATA')[0]; print 'invalid' if not valid yyy; print modes 'xxx'; ^Z 43 fooremove invalid bad 'xxx' at - line 11.
In either case, the data in %ops is absolutely immutable.
Give a man a fish: <%-{-{-{-<
In reply to Re: Multi-dimensional constants
by AnomalousMonk
in thread Multi-dimensional constants
by Ionic
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |