PopeFelix has asked for the wisdom of the Perl Monks concerning the following question:
I have the following data structure that I'm effectively treating as an ordered hash. I realize that I could use Tie::IxHash, but for various reasons (see below) I don't want to do that.
my $spec = { 'Parameters' => [ 'shipmentIncrementId' => { 'required' => 1, 'type' => 'string', }, 'carrier' => { 'required' => 1, 'type' => 'ups|usps|dhl|fedex|dhlint|custom', }, 'title' => { 'required' => 1, 'type' => 'string', }, 'trackNumber' => { 'required' => 1, 'type' => 'string', }, ], 'Response' => 'scalar', };
I'm iterating over the keys like so:
my @params = $thing->{'Parameters'}; for my $index (0..$#params) { next if $index % 2 != 0; my $parameter = $params[$index]; my $spec = $params[$index + 1]; # do something from here... }
Is there a more elegant way of doing that?
As to why I'm not doing Tie::IxHash: I'm using this to specify dynamic methods like so:
define_method 'foo' => { 'Parameters' => [ 'bar' => { 'required => 1, 'type' => 'string', }, 'baz' => { 'required => 1, 'type' => 'string', }, ] };
Note that the application requires the arguments to be in order. I'm not sure how I'd use Tie::IxHash in that situation.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: More elegant way of doing "ordered hash"?
by kcott (Archbishop) on Oct 10, 2013 at 08:00 UTC | |
Re: More elegant way of doing "ordered hash"?
by boftx (Deacon) on Oct 09, 2013 at 22:19 UTC | |
by PopeFelix (Beadle) on Oct 10, 2013 at 19:36 UTC | |
by PopeFelix (Beadle) on Oct 10, 2013 at 19:38 UTC |
Back to
Seekers of Perl Wisdom