Tony1 has asked for the wisdom of the Perl Monks concerning the following question:

This node falls below the community's threshold of quality. You may see it by logging in.

Replies are listed 'Best First'.
Re: eval function
by kyle (Abbot) on Apr 13, 2007 at 14:57 UTC

    Have you read the eval documentation? Do you have any specific questions after reading it? Is there a particular problem you're trying to solve?

      hai i a had read it but i and also understand some how but it's not working while using eval in my perl programming i want to know the meaning of the eval function
        What did you try that didn't work?

        Here are some examples that might help:

        # this prints "something" with extra layers of pointless recursion: print (eval (eval (eval (eval (eval (eval "something"))))); # prints 1024 $it = "ev"."al (".substr("devaluation",1,4) . "(2+2)" ."*"x2 . " 3)"; foreach (0..3) { $it = "eval($it) * 2" } print eval($it);
Re: eval function
by dynamo (Chaplain) on Apr 13, 2007 at 15:30 UTC
    Eval is a method that allows you to run dynamically generated (or dynamically retrieved) code.

    Generally, I view it as a masochistic feature of the language, try not to use it unless you really need to (there is almost always a way to get around it). Most applications I have seen that really require eval fall under the heading of Stupid Perl Tricks.

    It is often used to confuse, impress, and/or scare other perl programmers; or to break rules. What's your goal and why do you think it might require eval?
      Generally, I view it as a masochistic feature of the language, try not to use it unless you really need to (there is almost always a way to get around it). Most applications I have seen that really require eval fall under the heading of Stupid Perl Tricks.
      There's no other way to do error trapping in perl. If you want to intercept a "die/croak" in someone else's code and handle it yourself, you need to use eval.

      Myself, I like to do things like:

      use Test::More; SKIP: { eval { require DBD::SQLite }; skip "DBD::SQLite not installed", 3 if $@; # 3 is "how many to skip" # ... tests using SQLite }

        dynamo was talking about eval EXPR.
        You are talking about eval BLOCK.
        Despite the similariry in their name, they are two very different functions with very different purposes.