App-Dispatch
view release on metacpan or search on metacpan
bin/app_dispatch view on Meta::CPAN
die "SYSTEM alias can only be specified in /etc/dispatch.conf.\n";
}
die "'$file' line $ln not valid: '$line'\n";
}
close($fh);
}
sub dispatch {
my $self = shift;
my ( $program, @argv ) = @_;
die "No program specified\n" unless $program;
return $self->debug if $program eq 'DEBUG';
my @cascade;
unshift @cascade => shift @argv while @argv && $argv[0] ne '--';
shift @argv;
@cascade = ( 'DEFAULT', 'SYSTEM' ) unless @cascade;
my $conf = $self->programs->{$program} || {};
my $run;
for my $item (@cascade) {
if ( $item eq 'ENV' ) {
$run = $program;
}
elsif ( my $alias = $conf->{$item} ) {
next unless -x $alias;
$run = $alias;
}
elsif ( -x $item ) {
$run = $item;
}
}
exec( $run, @argv ) if $run;
print STDERR "Could not find valid '$program' to run.\n";
print STDERR "Searched: " . join( ', ', @cascade ) . "\n";
print STDERR "'$program' config: ";
if ( keys %$conf ) {
print "\n";
for my $alias ( keys %$conf ) {
print STDERR " $alias = $conf->{$alias}\n";
}
}
else {
print STDERR "No config for '$program'\n";
}
print STDERR "\n";
exit 1;
}
sub debug {
my $self = shift;
require Data::Dumper;
print Data::Dumper::Dumper($self);
}
}
( run in 2.337 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )