my $cmd_tmpl = {
backup => '$bak_cmd $client > $file',
list => '$list_cmd -le $client',
...
}
# all the names of the vars to be substituted
my @all_my_vars = qw / bak_cmd client file list_cmd ... / ;
####
sub some_func {
my $func = 'backup';
my $client = 'mars';
my $cmd = eval_cmd($func); # here magic happens!
seurity_check($cmd);
system("$cmd");
}
####
sub eval_cmd {
my $key = shift;
die "no such command: $key!" unless exists $cmd_template{$key};
my $cmd = $cmd_template{$key};
no strict "vars";
for my $var (@all_my_vars) {
$cmd =~ s/\$var/$$var/g if defined $$var;
}
use strict "vars";
return $cmd;
}
####
# $client can be given, or not
if ($client) {
some_func();
} else {
foreach $client (@{get_all_running_clients()}) {
my $backup-cmd = eval_cmd('backup');
system('$backup-cmd');
}
}