Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re: Small examples of string eval

by ruzam (Curate)
on May 14, 2006 at 03:16 UTC ( #549287=note: print w/ replies, xml ) Need Help??


in reply to Small examples of string eval

I have two places where I use eval all the time. I think eval is the best choice in these situations, maybe someone has a better alternative (that doesn't require non-core modules).

1) retrieving stored hashes
I regularily used Data::Dumper to turn hashes into strings so they can be stored in a database for later retrieval. The string accurately represents the original hash with out my having to do a thing and it's safe to store anyway I have to, flat files, dbm, mysql. When the data is later retrieved, eval is the easiest way to get it back into a useful hash. Something like this:

use Data::Dumper; $Data::Dumper::Indent = 0; # no spaces tabs or other fluff $Data::Dumper::Purity = 1; # include code to recreate recursive refere +nces sub store_hash { my $hash_ref = shift; my $saved = Dumper($hash_ref); # store $saved somewhere } sub get_hash { # get $saved from somewhere my $VAR1; eval {$saved} return $VAR1 ? $VAR1 : {}; }

1) wrapping DBI calls to capture errors. Far as I know this is the recommended (only?) way to do this.
sub selectrow_array { my $dbh = shift; my $query = shift; my @result; eval { @result = $dbh->selectrow_array($query) }; return my_custom_error_handler("selectrow_array $query") if $@; return @result; }
More generically I guess you could say eval is the tool of choice when ever you have to call code beyond your control that may kill your script.


Comment on Re: Small examples of string eval
Select or Download Code
Re^2: Small examples of string eval
by eyepopslikeamosquito (Canon) on May 14, 2006 at 03:43 UTC

    eval { @result = $dbh->selectrow_array($query) }; return my_custom_error_handler("selectrow_array $query") if $@;
    That is an example of block eval, not string eval; the OP was asking about string eval. There is wide agreement that block eval is a good thing in Perl 5 (for exception handling). Overloading eval with two different meanings in Perl 5 was unfortunate and is fixed in Perl 6, where block eval is spelled try.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (10)
As of 2015-07-06 09:17 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 (70 votes), past polls