I suppose the reason it's more efficient is that it compiles it at actual
compile time. The only use I know of eval{} is catching dies...

On 10/23/06, Paul Cochrane <[EMAIL PROTECTED]> wrote:

> > This patch adds a test for DOS line endings in text files in the
> > Parrot distribution.
> >
> > Comments welcome,
>
> Hi Paul,
>
> could you add a check for SVN::Client and skip the test when there is no

> SVN::Client?

Bernhard,

No worries :-)  Please see attached patch.

I noticed something odd when I was testing this patch.  When I used
the following code (adapted directly from perlcritic.t )

BEGIN {
    eval { use SVN::Client; };
    if ($@) {
        plan skip_all => 'SVN::Client not installed';
    }
}

and tested that the test couldn't find SVN::Client and hence would
skip the tests, I got a compile-time error that the module wasn't in
@INC, yet when I change the eval statement to:

eval "use SVN::Client";

it works (by printing just the message: "SVN::Client not installed"),
and yet Programming Perl says that the latter C<eval> is just a less
efficient form of the former.  Any ideas what's going on here?  I then
tested perlcritic.t and found that it gives an @INC compile time error
too when it can't find Test::Perl::Critic, and I can supply a patch
for that if you want.  The reason I ask is that even though I have a
solution, I don't know *why* it works, and I'd like to, but can't seem
to find any reason for the difference between the C<eval> forms.

Many thanks in advance!

Paul

files affected:
MANIFEST
t/codingstd/line_endings.t



Reply via email to