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

This is most likely a user (i.e my) error, which is why I'm not reporting it as a bug on the Perl::Critic CPAN page.

I installed Perl::Critic for the first time and now when I'm running the binary perlcritic against a file I get the following error:

Fatal error while critiquing "MyPackage.pm": Can't locate object method "logical_filename" via package "PPI::Statement::Package" at .../perl/5.10.0/lib/Perl/Critic/Policy/Modules/RequireFilenameMatchesPackage.pm line 56.

# perl -MPerl::Critic -e 'print Perl::Critic->VERSION , "\n"'; 1.105

# perl --version This is perl, v5.10.0 built for i686-linux-thread-multi

I looked at the line 56 of RequireFilenameMatchesPackage.pm which says:

my $filename = $pkg_node->logical_filename() || $doc->filename();

and $pkg_node is set to:

my $pkg_node = $doc->find_first('PPI::Statement::Package');

This is where I'm stuck right now. I would really appreciate some help with that.

Thanks, elTr.

Replies are listed 'Best First'.
Re: Perl::Critic reports an error
by ikegami (Patriarch) on Dec 12, 2009 at 02:21 UTC
    A quick look about to code seems to indicate PPI version 1.205 or higher is needed. Is that what you have?

      This can very well be it: # perl -MPPI -e 'print PPI->VERSION' 1.201

      Thanks for pointing this out to me, I didn't find this requirement anywhere. I'm also having a few issues with CPAN, it's not automatically installing the newest version of a module. I have to force it by manually specifying the .tar.gz file. But I guess that's another issue.

      Also thanks to Khen1950fx, I'll see if I can use that script.

        I didn't find this requirement anywhere.

        Then I imagine you didn't use the installer or cpan. Also see the distribution's META.yml.

Re: Perl::Critic reports an error
by Khen1950fx (Canon) on Dec 13, 2009 at 00:37 UTC
    I ran into a similar situation last week. I threw this together to correct it:

    #!/usr/local/bin/perl use strict; use warnings; use CPAN; CPAN::Shell->install( "base", "Data::Dumper", "Exporter", "File::Spec", "Test::Simple", "List::MoreUtils", "Readonly", "Scalar::Util", "PPI", "PPI::XS", "Perl::Critic", "Perl::Critic::More", "Perl::Critic::StricterSubs", "Perl::Critic::Deprecated", "Perl::Critic::Compatibility", "ELLIOTJS/Perl-Critic-Moose-0.999_002.tar.gz", "Perl::Critic::Dynamic", "Perl::Critic::Policy::Dynamic::NoIndirect", "Perl::Critic::Bangs", "Test::Perl::Critic", "Perl::Critic::Tics", "Perl::Critic::Swift", "Perl::Critic::Nits", "Perl::Critic::Pulp", "Perl::Critic::Storable", "Perl::Critic::Lax", "Perl::Critic::Policy::Variables::ProhibitUselessInitialization", "Perl::Critic::Itch", "criticism", "Test::Perl::Critic::Progressive");