#!/usr/bin/perl
use warnings;
use strict;
use Local::Evaluator qw(evaluate);
system map { Local::Evaluator::evaluate($_) } @ARGV;
####
package Local::Evaluator;
use warnings;
use strict;
use parent 'Exporter';
our @EXPORT_OK = qw( evaluate );
{
my %HASH;
$HASH{safe}{bin} = '/usr/bin';
$HASH{unsafe}{bin} = '/bin';
sub evaluate {
my $word = shift;
return $word unless 0 == index $word, '#';
my ($key, $subkey, $rest) = (split /#/, $word, 4)[1 .. 3];
return $HASH{$key}{$subkey} . $rest if $HASH{$key}
and exists $HASH{$key}{$subkey};
return $word;
}
}
__PACKAGE__
####
$ ./evaluate.pl ls -latr \#unsafe#bin#/true
-rwxr-xr-x 1 root root 30204 2010-09-21 20:33 /bin/true
$ ./evaluate.pl ls -latr \#safe#bin#/true
ls: cannot access /usr/bin/true: No such file or directory