#!/usr/bin/perl
# Filename: unpack.pl
# Description: Unpacks hash of unknown types
# Supported Langauge(s): Perl 5.8.x
# Time-stamp: <2008-06-26 21:47:59>
# --------------------------------------------------------
use strict;
# This is an array of strings
my @array = ("arr1", "arr2");
# This is a "predicable" hash, each string maps to a string:
my %hash = (
'key0' => 'val0',
'key1' => 'val1',
);
# This is an "unpredictable" hash:
my %mixed = (
'key0' => 'string',
'key1' => \@array,
'key2' => \%hash,
);
# Note that I had to use '\' to indicate that I'm building
# this hash with references to the previous array and hash.
# I.e. not the array or hash itself, but a reference to it.
#
# I say this hash is unpredictable because it might seem
# tricky recurse throuh it if you didn't know the mapping:
# if key0 mapped to @array and key1 mapped to %hash etc.
# -------------------------------------------------------
# Perl's dumper works:
use Data::Dumper;
print Dumper(\@array);
print Dumper(\%hash);
print Dumper(\%mixed);
# -------------------------------------------------------
# Let's recursively loop through each:
print "Array:\n";
foreach my $str (@array) {
print "\t" . $str . "\n";
}
# -------------------------------------------------------
print "Hash:\n";
foreach my $key (keys %hash) {
print "\t" . $key . " --> " . $hash{$key} . "\n";
}
# -------------------------------------------------------
print "\nMixed:\n";
foreach my $key0 (keys %mixed) {
print "\t" . $key0 . " => ";
my $unknown = $mixed{$key0};
if (ref($unknown) eq 'HASH') {
print "{";
foreach my $key1 (keys %$unknown) {
# dereference with $$
print $key1 . " => " . $$unknown{$key1} . ", ";
}
print "}";
}
elsif (ref($unknown) eq 'ARRAY') {
print "[";
foreach my $str (@$unknown) {
print $str . ", ";
}
print "]";
}
else { # it's a string
print $unknown;
}
print "\n";
}
Thursday, June 26, 2008
Perl: hashes of unknown elements
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment