Here is my solution. Although not as in depth, I think it's quite simpler. Expanding it wouldn't be too hard. Right now it only checks for arrays and hashes.
#!/usr/bin/perl
use strict;
my $ref1 = [ { key => [ [ "foo" ] ] } ];
my $ref2 = [ [ { key => [ "bar" ] } ] ];
my $ref3 = [ { key => [ [ "baz" ] ] } ];
sub type {
my $obj = shift;
my $type;
START:
if (ref($obj) eq "HASH") {
$type .= "oH";
$obj = [values(%$obj)]->[0];
goto START;
} elsif (ref($obj) eq "ARRAY") {
$type .= "oA";
$obj = $obj->[0];
goto START;
}
$type =~ s/^o//;
return $type;
}
sub compare {
my $obj1 = shift;
my $obj2 = shift;
my $type1 = type($obj1);
my $type2 = type($obj2);
return $type1 eq $type2 ? 1 : 0;
}
print type($ref1); # Returns AoHoAoA
print compare($ref1, $ref2); # Returns 0
print compare($ref1, $ref3); # Returns 1
elusion : http://matt.diephouse.com
-
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.
|