I have to say that I wonder about validation code like this. Whats the point? You are checking the type to throw an error, but what will happen if you try to use the object without doing these checks? Remarkably, in almost every way the exact same thing will happen (under strict anyway), ie, the interpreter will throw an errror.

So just let the interpreter throw the error.

Now I can hear the peanut gallery saying "yeah but what happens if they pass in an object that is blessed into a package that has the methods im concerned about?" My answer would be, you mean you know in advance that this would be wrong? What happens if they decide to reimplement the interface in a different class structure and decide to use that?

IE, most of this type of validation just removes the flexibility of the consumer, and adds very little or nothing to the robustness of your code.

I will agree there are cases where doing checks like these properly is vital, but IMO that is usally confined to cases where you have specific handlers for different input types, not simply screen for a valid type.

Ultimately if you _do_ want to do checks like these then you should look into using Scalar::Util.

---
$world=~s/war/peace/g


In reply to Re: How to differentiate hash reference and object reference? by demerphq
in thread How to differentiate hash reference and object reference? by tphyahoo

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.