Thu Jul 14 10:22:29 2011: Request 69471 was acted upon.
Transaction: Correspondence added by zloyrusskiy
       Queue: Module-ScanDeps
     Subject: Problem with "eval { require SomeModule }" constructions
   Broken in: 1.02
    Severity: Important
       Owner: Nobody
  Requestors: alexandrfedo...@gmail.com
      Status: open
 Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=69471 >


I'm sorry.

Today check my script "scandeps.pl -c parser.pl" and found such a problem:

fileparse(): need a valid pathname at
C:/strawberry/perl/site/lib/Module/ScanDeps/DataFeed.pm line 57
END failed--call queue aborted.
SYSTEM ERROR in compiling parser.pl: 65280 at
C:/strawberry/perl/site/lib/Module/ScanDeps.pm line 1239.

some time later i've discovered that it's because some values of %INC
was undefined like (see last value):
  "subs.pm",
  "C:/strawberry/perl/lib/subs.pm",
  "warnings/register.pm",
  "C:/strawberry/perl/lib/warnings/register.pm",
  "Exporter.pm",
  "C:/strawberry/perl/lib/Exporter.pm",
  "vars.pm",
  "C:/strawberry/perl/lib/vars.pm",
  "strict.pm",
  "C:/strawberry/perl/lib/strict.pm",
  "Params/ValidateXS.pm",
  undef 

i look in parent of this module Params::Validate and see construction:
... eval { require Params::ValidateXS } ...

Params::ValidateXS has errors in windows and it returns with error, so i
let's look in http://perldoc.perl.org/functions/require.html at code of
require sub:
if ($@) {
$INC{$filename} = undef;
die $@;

when required module has errors, require sub undefs value in %INC and
died, but eval doesn't break program flow, so we have undefs in %INC and
errors in your great module.

So i think that you need to add some check for undefined values.
I solved this by patching Module::ScanDeps::DataFeed like that:
--- DataFeed.pm.org      Thu Jul 14 14:15:31 2011
+++ DataFeed.pm Thu Jul 14 14:14:26 2011
@@ -59,7 +59,7 @@
                 Cwd::abs_path(File::Basename::dirname($inc{$_})),
                 File::Basename::basename($inc{$_}),
             ),
-        } keys(%inc)
+        } grep defined $inc{$_},keys(%inc)
     );
     print FH "\n);\n";


P.S. Sorry for my bad English (((

Reply via email to