Hello everyone,
Here and there on the web I encounter claims that the do {} operator is
depreciated. However I find it convenient to do things like:
eval { some stuff } or do { some multiline error handling };
is this a bad practice?
Thanks
Peter
QUOTE |
Here and there on the web I encounter claims that the do {} operator is depreciated. However I find it convenient to do things like: eval { some stuff } or do { some multiline error handling }; is this a bad practice? |
QUOTE |
Hello everyone, Here and there on the web I encounter claims that the do {} operator is depreciated. However I find it convenient to do things like: eval { some stuff } or do { some multiline error handling }; is this a bad practice? Thanks Peter |
QUOTE |
Peter Rabbitson wrote: Hello everyone, Here and there on the web I encounter claims that the do {} operator is depreciated. However I find it convenient to do things like: eval { some stuff } or do { some multiline error handling }; is this a bad practice? Thanks Peter Didn't see anything about 'do' being deprecated in the perldoc -f do or perldoc perlsyn docs. Though do SUBROUTINE was stated as deprecated. The problem (IMHO) with the above is that you can't return a positive value from the eval and you haven't error checked whether there was an exception thrown, which is one of the more common reasons to use an eval in the first place. So I guess my question is, why are you using the eval to begin with? my $return = eval { some stuff }; if ($@) { rethrow or handle "Eval failed with: $@"; } unless ($return) { some multiline error handling; } The problem is that eval returning a false/undefined value shouldn't necessarily have to indicate failure. And if the 'eval' isn't catching an exception then there is really no reason to use it in the first place. http://danconia.org |
QUOTE |
Checking for $@, though, is a must no matter what you're using [eval] for.. |
QUOTE |
Peter Rabbitson wrote: Hello everyone, Here and there on the web I encounter claims that the do {} operator is depreciated. However I find it convenient to do things like: eval { some stuff } or do { some multiline error handling }; is this a bad practice? Thanks Peter Didn't see anything about 'do' being deprecated in the perldoc -f do or perldoc perlsyn docs. Though do SUBROUTINE was stated as deprecated. The problem (IMHO) with the above is that you can't return a positive value from the eval and you haven't error checked whether there was an exception thrown, which is one of the more common reasons to use an eval in the first place. So I guess my question is, why are you using the eval to begin with? my $return = eval { some stuff }; if ($@) { rethrow or handle "Eval failed with: $@"; } unless ($return) { some multiline error handling; } The problem is that eval returning a false/undefined value shouldn't necessarily have to indicate failure. And if the 'eval' isn't catching an exception then there is really no reason to use it in the first place. |
QUOTE |
On Thu, Jun 30, 2005 at 09:05:00AM -0600, Wiggins d'Anconia wrote: |
QUOTE |
I am sorry, I wasn't clear enough. I am aware of eval returning the last statements return value, thus the possibility of having an undef result. I am using it exclusively for control of "do or die" tasks, as DBI operations for example, where even if it returns 0 it still evalutes true. The reason I do () an entire block is because I specify additional error messages. Like this: my $dsn = join (':', 'DBI', $cfg->{engine}, join (';', "database=$cfg->{database_name}", "host=$cfg->{host}", "port=$cfg->{port}", ), ); my $dbh; eval { $dbh = DBI->connect ($dsn, $auth->{user}, $auth->{pass}, { AutoCommit => 0, RaiseError => 1, PrintError => 0, } ) } or do { $ERROR = "Unable to connect to '$dsn':n" . ($DBI::errstr || 'Unknown error'); return undef; }; return $dbh; |
QUOTE |
Thanks for the feedback Peter |
QUOTE |
Peter Rabbitson wrote: [snip] Either way there shouldn't be a need for eval unless you have raise error on, but in that case you should catch the exception with $@. http://danconia.org Thanks for the feedback Peter |
QUOTE |
Just as a side note... this is really a stylistic or idiomatic argument. |