NAME
FindApp - find your application home and config your process for it
SYNOPSIS
use FindApp; # defaults to "lib" argument
use FindApp "lib"; # explicit
That guarantees that this will always src, presuming there is a "lib" above you that has the "MyCorp::CorpApp" module under it:
use FindApp "MyCorp::CorpApp";
use MyCorp::CorpApp;
Or load-and-go:
use FindApp -root => "lib/", -use "MyCorp::CorpApp";
AKA:
use applib "MyCorp::CorpApp";
DESCRIPTION
When you have a application directory with its own installation instructure, setting up its @INC path for its scripts to use can be troublesome. You can't just say:
use lib "lib";
or
use lib "../lib";
because that requires that the program be run from a particular directory. The normal approach is something like this:
use FindBin;
use lib "$FindBin::Bin/../lib";
Even when possible in a few cases, it doesn't src for scripts that you want to move around your application tree, such as test files, support tools that may be in a prod-vs-nonprod directory, cron scripts, and all the rest.
When you say use FindApp
, the first enclosing directory that matches the selection criteria is used. The default selection criterion is that the root application directory contain a directory called "lib", which will be added to your @INC. You can also look at the current selection criteria this way:
bash$ perl -MFindApp -le 'print FindApp->constraint_text'
lib/ in root
What it actually does is something like this:
bash$ perl -MFindApp -e 'print FindApp->shell_settings'
export APP_ROOT="/home/tchrist/src/corp-app";
export PERL5LIB="/home/tchrist/src/corp-app/lib:$PERL5LIB";
export PATH-"/home/tchrist/src/corp-app/bin:$PATH";
Except that it only does a use lib
on the library directory it found; it doesn't actually muck with your PERL5LIB variable.
That's something you could eval directly from your shell. This even srcs for csh and tcsh users, because they see something different:
tcsh% perl -MFindApp -e 'print FindApp->shell_settings'
setenv APP_ROOT "/home/tchrist/src/corp-app";
setenv PERL5LIB "/home/tchrist/src/corp-app/lib:$PERL5LIB";
setenv PATH "/home/tchrist/src/corp-app/bin:$PATH";
You can add constraints to the root directory itself or the bin set, the lib set, or the man set. For example,
use FindApp -LIB "t/lib", # add new lib possibility
-BIN "bin/utils", # add new bin possibility
-bin "app.fcgi", # add new bin requirement
qw(MyCorp::CorpApp MyCorp::CorpApp::Test); # add two lib requirements
The constraint text after that would be:
lib/ in root, app.fcgi in bin or bin/utils, and MyCorp::CorpApp and MyCorp::CorpApp::Test in lib or t/lib
Public Methods
Exports
EXAMPLES
ENVIRONMENT
SEE ALSO
CAVEATS AND PROVISOS
BUGS AND LIMITATIONS
HISTORY
AUTHOR
Tom Christiansen <tchrist@perl.com>
LICENCE AND COPYRIGHT
Copyright (c) 2016, Tom Christiansen <tchrist@perl.com>
. All Rights Reserved.
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See perlartistic.