Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re^4: eval to replace die?

by chromatic (Archbishop)
on Oct 04, 2010 at 14:43 UTC ( #863350=note: print w/ replies, xml ) Need Help??


in reply to Re^3: eval to replace die?
in thread eval to replace die?

I agree that it's difficult to use exception objects pervasively (especially when using other code), and I wouldn't have enabled this rule for Perl::Critic by default myself, but it's very much worth considering the risk and fragility of string comparisons for exception handling.


Comment on Re^4: eval to replace die?
Replies are listed 'Best First'.
Re^5: eval to replace die?
by BrowserUk (Pope) on Oct 04, 2010 at 15:48 UTC
    the risk and fragility of string comparisons for exception handling.

    Even in Java, it's still "string compare". It's done at compile-time rather than run-time, which is good. But it is still string compare.

    But Exception::Class does not give you that advantage.


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.

      I should be more precise, you're right.

      Imagine instead I wrote "the risk and fragility of using fuzzy regular expression matches for exception handling, especially when type checks and polymorphism are much more reliable".

        Imagine instead I wrote "the risk and fragility of using fuzzy regular expression matches for exception handling, especially when type checks and polymorphism are much more reliable".

        And I say you are talking bollocks.

        • Because "type checks" are just string compares.

          Pretty much exactly:

          if( ref( $obj ) eq $type ) { ... ## or if( $obj =~ m[=$type$] ) { ...
          .
        • And polymorphism--of the type you are alluding to--is just multiple string compares.

          Pretty much:

          if( ref( $exception ) eq $type ) or grep{ ref( $exception ) eq $_ } @{ $type::ISA } ) { ... ## or if( $exception =~ m[=$type$] or grep{ $exception =~ m[=$_] } @{ $type::ISA } ) { ...

        which demonstrates the lie of "more reliable, never mind "much more reliable.

        You are selling a philosophy--your own home-spun, personal prejudice--on the basis of a technical merit which it simply does not live up to.

        Exception::Class exceptions are:

        1. defined in terms of strings:
          use Exception::Class ( 'MyException', 'AnotherException' => { isa => 'MyException' },
        2. thrown in terms of strings: MyExceptions->throw( error => 'Divisor undefined' ) unless defined $d;
        3. and caught in terms of strings: if ( $e = Exception::Class->caught('MyException') ) {

        Which means you're even more reliant upon string compares, but now you have more places to change in order to maintain them.

        I really wonder if you think through your justifictions at all. It sure doesn't look like it.


        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://863350]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (8)
As of 2015-07-31 01:19 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (274 votes), past polls