You really didn't say much about what you're trying to do.  You said you
did some stuff and some other stuff didn't happen.  It's hard to help
you -- what *exactly* is the problem?  (There are plenty of things that
install and run apps on the CPAN.  App::Ack comes to mind.  It Just
Works, there is nothing special you need to do.)

That said, I always do this:

  package MyApp::Script::Whatever;
  use Moose;
  with 'MooseX::Getopt';

  has ...;
  sub run { ... }

Then:

  #!/usr/bin/env perl
  use FindBin qw($Bin);
  use lib "$Bin/../lib";
  use MyApp::Script::Whatever;
  
  MyApp::Script::Whatever->new_with_options->run;

This is similar to your "parse $0" solution.  But of course it won't
work for installed scripts where the library directory isn't in @INC.

>       If I put #!perl at the top of display.pl it will have a path to perl
> (though not the one I specified), but it won't have "use lib $HOME/MyApp/lib"
> at the top of the script, so it can't run.
>       Furthermore, there's no way for the script to know what was used
> for install_base, so there's no way for the script to know where the data
> file is located.
>
>       This must be something people do, right? Currently I hard code paths
> and force the installation to be where I want it, but this seems really
> sub-optimal, doesn't work for having test environments, etc.
>       I've been considering parsing $0 at the top of the script, is that
> what other people do?
>

All I can say about this is ... right.  You need to put the path where
you install stuff into @INC (via PERL5LIB).  See local::lib, for
example.  Module::Build (etc.) isn't going to edit your file to
hard-code the install path... I guess you could do that, but I've never
seen anyone do that.

Perhaps you are worrying a problem that doesn't exists?

Regards,
Jonathan Rockway

-- 
print just => another => perl => hacker => if $,=$"

Reply via email to