僕の家

package My::Sweet::Home;

use warnings;
use strict;
use Cwd ();

our $APP_NAME = 'HOGE';
our $Home     = undef;

sub location {
    my $self  = shift;
    my @homes = (
        sub {$My::Sweet::Home::Home},
        sub { $ENV{ $APP_NAME . '_HOME' } },
        sub { Cwd::getcwd },
    );

        for my $home (@homes) {
            my $res = $home->();
            next unless $res;

            return $res;
        }

    die 'you are a homeless T_T';
}

1;
#!/usr/bin/perl 

use warnings;
use strict;
use My::Sweet::Home;


{
    print '1:' . My::Sweet::Home->location() . "\n";
}
{

    $ENV{SWEETY_HOME} = '/home/seety';
    local $My::Sweet::Home::APP_NAME ='SWEETY';
    print '2:' . My::Sweet::Home->location() . "\n";
}
{
    local $My::Sweet::Home::Home ='/tmp/okushon';
    print '3:' . My::Sweet::Home->location() . "\n";
}
1:/home/tomyhero/app/My-Sweet-Home/lib
2:/home/seety
3:/tmp/okushon