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

% perl -MExtUtils::Installed -le 'print for ExtUtils::Installed->new-> +files("Catalyst")' Catalyst is not installed at -e line 1. % perl -MModule::Metadata -le 'print Module::Metadata->new_from_module +("Catalyst")->{filename}' /perl5/perlbrew/perls/perl-5.42.0/lib/site_perl/5.42.0/Catalyst.pm
Compare to module with a .packlist:
% perl -MExtUtils::Installed -le 'print ExtUtils::Installed->new->pack +list("CGI")->packlist_file' /perl5/perlbrew/perls/perl-5.42.0/lib/site_perl/5.42.0/darwin-2level/a +uto/CGI/.packlist ls -l /perl5/perlbrew/perls/perl-5.42.0/lib/site_perl/5.42.0/darwin-2l +evel/auto/CGI -rw-r--r-- 1 user staff 1.3K Jan 2 00:34 .packlist drwxr-xr-x 3 user staff 96B Jan 10 05:23 Ajax drwxr-xr-x 3 user staff 96B Jan 10 05:24 Application drwxr-xr-x 3 user staff 96B Jan 10 05:32 Compress drwxr-xr-x 3 user staff 96B Jan 10 05:33 PSGI drwxr-xr-x 3 user staff 96B Jan 10 05:33 Prototype drwxr-xr-x 3 user staff 96B Dec 17 11:39 Simple drwxr-xr-x 3 user staff 96B Dec 17 11:39 Struct drwxr-xr-x 3 user staff 96B Dec 17 11:39 Wiki % ls -l /perl5/perlbrew/perls/perl-5.42.0/lib/site_perl/5.42.0/darwin- +2level/auto/Catalyst drwxr-xr-x 4 user staff 128B Apr 15 07:00 Action drwxr-xr-x 4 user staff 128B Apr 15 07:00 Controller drwxr-xr-x 3 user staff 96B Dec 17 11:46 Devel drwxr-xr-x 4 user staff 128B Apr 15 07:00 Engine drwxr-xr-x 3 user staff 96B Dec 17 11:46 Manual drwxr-xr-x 5 user staff 160B Dec 17 11:46 Plugin drwxr-xr-x 3 user staff 96B Dec 17 11:45 Runtime

Replies are listed 'Best First'.
Re: ExtUtils::Installed fails to find Catalyst because it doesn't have a .packlist
by Corion (Patriarch) on Apr 15, 2026 at 14:37 UTC

    So consider (re)installing Catalyst with a package installer that creates a .packlist file, or create it yourself?

      I agree with Corion's advice. I prefer the package installer route that creates .packlist for you.

      "It's not how hard you work, it's how much you get done."

      I think ExtUtils::Install creates the .packlist during make install. It was installed by cpanm like all my other modules and a reinstall did not create a .packlist. Going through the Catalyst files like Makefile.PL I don't see a deliberate effort to delete the .packfile so maybe something's wrong with how it interacts with ExtUtils::Install? Creating my own .packlist files for random CPAN modules is not within the scope of my application. I'd rather know what is breaking the perl toolchain here. Thanks

        Meta: Consider adding such information to your top post in the first place instead of waiting for replies trying to find out what your actual problem or question is. Maybe also consider phrasing the title of your post as a question instead of a statement of what you see.

        Since you don't tell us anything about the difference between how you installed Catalyst versus how you installed other modules, there is very little we can do without your help here. Consider finding out what the difference is in installation between the two distributions.

Re: ExtUtils::Installed fails to find Catalyst because it doesn't have a .packlist
by Haarg (Priest) on Apr 16, 2026 at 12:02 UTC

    ExtUtils::Installed's files method expects you to pass it the "main" module of a dist. For Catalyst, this is Catalyst::Runtime.

    $ perl -MExtUtils::Installed -le 'print for ExtUtils::Installed->new-> +files("Catalyst::Runtime")' .../bin/catalyst.pl .../lib/perl5/Catalyst/Exception/Detach.pm .../lib/perl5/Catalyst/Script/CGI.pm .../lib/perl5/Catalyst/Exception/Basic.pm .../lib/perl5/Catalyst/Base.pm .../lib/perl5/Catalyst/ActionContainer.pm .../lib/perl5/Catalyst/Test.pm .../lib/perl5/Catalyst/PSGI.pod .../lib/perl5/Catalyst/ActionChain.pm .../lib/perl5/Catalyst/Delta.pod .../lib/perl5/Catalyst/Component.pm .../lib/perl5/Catalyst.pm .../lib/perl5/Catalyst/Stats.pm .../lib/perl5/Catalyst/Component/ApplicationAttribute.pm .../lib/perl5/Catalyst/Engine.pm .../lib/perl5/Catalyst/Exception.pm .../lib/perl5/Catalyst/Dispatcher.pm .../lib/perl5/Catalyst/Runtime.pm .../lib/perl5/Catalyst/DispatchType.pm .../lib/perl5/Catalyst/Contributing.pod .../lib/perl5/Catalyst/Controller.pm .../lib/perl5/Catalyst/ActionRole/QueryMatching.pm .../lib/perl5/Catalyst/Script/Test.pm .../lib/perl5/Catalyst/UTF8.pod .../lib/perl5/Catalyst/Engine/HTTP.pm .../lib/perl5/Catalyst/ActionRole/ConsumesContent.pm .../lib/perl5/Catalyst/Script/FastCGI.pm .../lib/perl5/Catalyst/ActionRole/Scheme.pm .../lib/perl5/Catalyst/RouteMatching.pod .../lib/perl5/Catalyst/Response/Writer.pm .../lib/perl5/Catalyst/EngineLoader.pm .../lib/perl5/Catalyst/Script/Server.pm .../lib/perl5/Catalyst/Script/Create.pm .../lib/perl5/Catalyst/DispatchType/Index.pm .../lib/perl5/Catalyst/Request/Upload.pm .../lib/perl5/Catalyst/ActionRole/HTTPMethods.pm .../lib/perl5/Catalyst/Action.pm .../lib/perl5/Catalyst/DispatchType/Path.pm .../lib/perl5/Catalyst/DispatchType/Default.pm .../lib/perl5/Catalyst/Model.pm .../lib/perl5/Catalyst/Exception/Go.pm .../lib/perl5/Catalyst/Middleware/Stash.pm .../lib/perl5/Catalyst/Response.pm .../lib/perl5/Catalyst/ScriptRole.pm .../lib/perl5/Catalyst/View.pm .../lib/perl5/Catalyst/Component/ContextClosure.pm .../lib/perl5/Catalyst/Exception/Interface.pm .../lib/perl5/Catalyst/DispatchType/Chained.pm .../lib/perl5/Catalyst/Upgrading.pod .../lib/perl5/Catalyst/Utils.pm .../lib/perl5/Catalyst/Log.pm .../lib/perl5/Catalyst/Request/PartData.pm .../lib/perl5/Catalyst/ScriptRunner.pm .../lib/perl5/Catalyst/Plugin/Unicode/Encoding.pm .../lib/perl5/Catalyst/Request.pm .../lib/perl5/Catalyst/ClassData.pm
Re: ExtUtils::Installed fails to find Catalyst because it doesn't have a .packlist
by hippo (Archbishop) on Apr 16, 2026 at 09:28 UTC
    ls -l /perl5/perlbrew/perls/perl-5.42.0/lib/site_perl/5.42.0/darwin-2l +evel/auto/CGI -rw-r--r-- 1 user staff 1.3K Jan 2 00:34 .packlist drwxr-xr-x 3 user staff 96B Jan 10 05:23 Ajax drwxr-xr-x 3 user staff 96B Jan 10 05:24 Application drwxr-xr-x 3 user staff 96B Jan 10 05:32 Compress

    That doesn't look right to me. ls does not display dotfiles by default, that requires the -a option or similar. Either you are not running a bare ls (eg. using an alias or function or other wrapper) or something else is going on which you have not explained. Either way, this casts doubt on the following snippet in which you use ls -l to "show" the absence of a dotfile.

    Assuming the dotfile absence is real, however, my best guess would be that something in the Catalyst installation has not completed entirely as expected for some reason or another. It is a bit of a beast in terms of dependencies so a snag in any of those could potentially bubble up and cause a problem with the overall installation. Either go through the cpanm logfile to find it or else try installing Catalyst by hand.


    🦛

      Good catch! You're right about the -a option but missed the -h :-). I do use an alias (alias ll='ls -lha') and replaced it with ls -l to prevent confusion but just created more! Anyway the dotfile absence from /Catalyst is real but I did find 10 .packlists under /Catalyst:
      /Catalyst/Action/RenderView/.packlist
      /Catalyst/Controller/POD/.packlist
      /Catalyst/Devel/.packlist
      /Catalyst/Engine/PSGI/.packlist
      /Catalyst/Manual/.packlist
      /Catalyst/Plugin/ConfigLoader/.packlist
      /Catalyst/Plugin/Session/.packlist
      /Catalyst/Plugin/Session/State/Cookie/.packlist
      /Catalyst/Plugin/Static/Simple/.packlist
      /Catalyst/Runtime/.packlist
      
      Thanks for your time.