Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?

A simple Comparison

by vtprogrammer (Friar)
on Jun 30, 2000 at 21:07 UTC ( #20627=perlquestion: print w/ replies, xml ) Need Help??
vtprogrammer has asked for the wisdom of the Perl Monks concerning the following question:

How do you compare two objects. I used if ($Part eq $PN) { do stuff; } But the comparison doesn't work. I've tried using "==" but that doesn't work either. It never equals even when they are exactly the same. Any suggestions?

Comment on A simple Comparison
Re: A simple Comparison
by btrott (Parson) on Jun 30, 2000 at 21:11 UTC
    If you compare them using eq or ==, all you're doing is comparing their values as references. And since they're two different objects--ie. not references to the same object--they're two different references. So they won't be equal.

    To do a proper object comparison, you'll need to write a method that compares two of your objects. One possibility would be to serialize the objects and compare the serialized strings:

    my $obj1 = new Obj; my $obj2 = new Obj; ## The two objects above are now equal, let's say. ## Serialize them, then compare the serialized ## data. use Storable qw/freeze/; if (freeze($obj1) eq freeze($obj2)) { ## They're the same. }
    In fact, you could even use overload to overload the comparison operator so that the proper comparison happens automagically:
    package Obj; use Storable qw/freeze/; use overload '==' => \&compare; sub compare { return freeze($_[0]) eq freeze($_[1]) }
    Now you can just say:
    if ($obj1 == $obj2) { # They're the same. }

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://20627]
Approved by root
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (10)
As of 2015-06-30 13:10 GMT
Find Nodes?
    Voting Booth?

    What kind of chocolate gives you the most pleasure?

    Results (788 votes), past polls