App-Sandy
view release on metacpan or search on metacpan
lib/App/Sandy/CLI/App.pm view on Meta::CPAN
has 'app_path' => (
is => 'ro',
isa => 'Str',
builder => '_build_app_path'
);
sub _build_app_path {
# Determine dynamic the app path that inherit from this class
# If no one is inheriting, return this class path
my $class = (caller(1))[3];
$class =~ s/::new//;
my $command_pm = file(split /::/ => "$class.pm");
return $INC{$command_pm};
}
override 'opt_spec' => sub {
super
};
sub command_map_bultin {
for (;;) {
/* we may be in a higher stacklevel, so dig down deeper */
while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
top_si = top_si->si_prev;
ccstack = top_si->si_cxstack;
cxix = DPPP_dopoptosub_at(ccstack, top_si->si_cxix);
}
if (cxix < 0)
return NULL;
/* caller() should not report the automatic calls to &DB::sub */
if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
level++;
if (!level--)
break;
cxix = DPPP_dopoptosub_at(ccstack, cxix - 1);
}
cx = &ccstack[cxix];
if (dbcxp) *dbcxp = cx;
if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
const I32 dbcxix = DPPP_dopoptosub_at(ccstack, cxix - 1);
/* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
field below is defined for any cx. */
/* caller() should not report the automatic calls to &DB::sub */
if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
cx = &ccstack[dbcxix];
}
return cx;
}
# endif
#endif /* caller_cx */
#endif /* 5.6.0 */
( run in 0.284 second using v1.01-cache-2.11-cpan-cc502c75498 )