#!/usr/bin/env perl -l use strict; use warnings; my %cmd_gen = ( backup => sub { my ($bak_cmd, $client, $file) = @_; return [ $bak_cmd, $client, '>', $file ]; }, list => sub { my ($list_cmd, $client) = @_; return [ $list_cmd, '-le', $client ]; }, ); my $bak_cmd = 'some_backup_prog'; my $list_cmd = 'some_list_prog'; for my $client (qw{XXX YYY ZZZ}) { my $file = $client . '.bak'; my $backup_cmd_ref = $cmd_gen{backup}->($bak_cmd, $client, $file); #system(@$backup_cmd_ref); # for production print "@$backup_cmd_ref"; # for debugging my $list_cmd_ref = $cmd_gen{list}->($list_cmd, $client); #system(@$list_cmd_ref); # for production print "@$list_cmd_ref"; # for debugging }