Interesting idea, but it doesn't actually work.
Here is the output:
#! /bin/perl
use Data::Dumper;
my $hash = {
'wheels' => {
'four' => {
'car' => {
'plain' => {
'sporty' => 'honda',
'retro' => 'volkswagon',
},
'fancy' => {
'red' => 'ferrari',
'silver' => 'maserati',
},
},
'truck' => {
'light' => {
'chevy' => 'pickup',
},
'utility' => {
'us' => 'mail',
'city' => 'trash',
'muni' => 'power',
'corp' => {
'dom' => 'dominion p
+ower',
'vap' => 'virginia p
+ower',
},
},
},
},
'one' => 'Unicycle',
'two' => {
'pedals' => 'bicycle',
'motorized' => 'motorcycle',
},
'three' => 'tricycle',
};
##---------------------------
## DEEP REFERENCE
##---------------------------
fetch2($hash, 'wheels');
fetch2($hash, 'wheels', 'four', 'truck', 'utility', 'blah');
fetch2($hash, 'wheels', 'four', 'truck', 'utility', 'corp', 'dom');
## Using your suggested technique
sub fetch2 {
my ($hash, @keys) = @_;
print "==> Fetching [" . join(', ', @keys) . ']' . "\n";
print Dumper $hash->{shift @keys}{shift @keys};
}
Produces:
==> Fetching [wheels]
$VAR1 = undef;
==> Fetching [wheels, four, truck, utility, blah]
$VAR1 = {
'car' => {
'plain' => {
'sporty' => 'honda',
'retro' => 'volkswagon'
},
'fancy' => {
'silver' => 'maserati',
'red' => 'ferrari'
}
},
'truck' => {
'light' => {
'chevy' => 'pickup'
},
'utility' => {
'city' => 'trash',
'muni' => 'power',
'us' => 'mail',
'corp' => {
'dom' => 'dominion p
+ower',
'vap' => 'virginia p
+ower'
}
}
}
};
==> Fetching [wheels, four, truck, utility, corp, dom]
$VAR1 = {
'car' => {
'plain' => {
'sporty' => 'honda',
'retro' => 'volkswagon'
},
'fancy' => {
'silver' => 'maserati',
'red' => 'ferrari'
}
},
'truck' => {
'light' => {
'chevy' => 'pickup'
},
'utility' => {
'city' => 'trash',
'muni' => 'power',
'us' => 'mail',
'corp' => {
'dom' => 'dominion p
+ower',
'vap' => 'virginia p
+ower'
}
}
}
};
Whereas the expected result should be:
==> Fetching [wheels]
$VAR1 = {
'three' => 'tricycle',
'one' => 'Unicycle',
'two' => {
'pedals' => 'bicycle',
'motorized' => 'motorcycle'
},
'four' => {
'car' => {
'plain' => {
'sporty' => 'honda',
'retro' => 'volkswagon'
},
'fancy' => {
'silver' => 'maserati',
'red' => 'ferrari'
}
},
'truck' => {
'light' => {
'chevy' => 'pickup'
},
'utility' => {
'city' => 'trash',
'muni' => 'power',
'us' => 'mail',
'corp' => {
'dom' =>
+ 'dominion power',
'vap' =>
+ 'virginia power'
}
}
}
}
};
==> Fetching [wheels, four, truck, utility, blah]
(nothing, because it doesn't exist)
==> Fetching [wheels, four, truck, utility, corp, dom]
$VAR1 = 'dominion power';
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.