I have a hash of hashes. Slices in this context are notably underrepresented in the Perl literature I've consulted (POD's and Camel).
I've done this before, but always by experimentation. Time has taught me not to depend on something I've only learned by verifying against an implementation.
$hash{hash} = {five => 5, six => 6, seven => 7};
@vals = @{$hash{hash}}{qw(five seven)};
Note, don't make the mistake of
which parses correctly but does not give you what you're looking for.@vals = $hash{hash}->{qw(five seven)};
I don't think I'd even know about slices if it weren't for the warning you get with @array[$i]
.
One of my beefs about perl is that it doesn't come with a good interactive environment (unlike python). I frequently test things against an implementation, just to see whether something works or not; I usually go to the documentation afterwords.
I must say though, that hash slices are one of those things that I nearly always avoid if possible; they're just too visually cluttered.
Re:Testing against implentations
jdavidb on 2002-06-18T13:04:59
It's not a very good interactive environment, but you can use the debugger with a command like
perl5.6.1 -de 1
. I do it often, including yesterday when playing with slices.I haven't completely decided if I should avoid hash slices or not. I'll agree they seem cluttered. I'll have to wait until I'm maintaining this code three years from now to decide.
:) For now I'm using them because they seem less cluttered than the alternative. Re:Testing against implentations
pudge on 2002-06-18T15:15:49
I don't understand what you mean. Yes, there is perl -d, as mentioned, and you can always use perl -e itself, too. But not knowing what you mean, I can't say if these are sufficient to your desires.
Testing is sometimes a problem. For testing Slash, I wrote Slash::Test, which exports the four major objects, Dumper(), the entire API, all the constants, all the available plugin objects, etc. so I can do stuff like:Everything I need is right there, so I don't need to bother setting it up, and testing little snippets is very simple. I can test templates, too:% perl -MSlash::Test=useperl -e 'print Dumper $slashdb->getUserFoo($user->{uid})'etc.% perl -MSlash::Test=useperl -eDisplay
[% USE Dumper; Dumper.dump( Slash.db.getUserFoo(user.uid) ) %]
^D
Testing environments are important, but if perl doesn't have one you need, it's not too hard to write one to suit your own purposes.
As to hash slices, I use them sparingly, usually only when other methods are more cluttered.
Re:Testing against implentations
torin on 2002-06-18T16:20:05
There are a few different interactive environments out there including theperl -dead
that folks have mentioned.
For interactive exploration of complex structures, I've found Data::Walker to be very useful.