$ perl -E ' my $x = $ARGV[0] =~ s/(`[^`]+`)/$1/eegr =~ s/\R//gr; say $x; ' 'DMY_`date +%d%m%Y`_MY_`date +%m%Y`_Y_`date +%Y`.log' DMY_21122019_MY_122019_Y_2019.log #### $ perl -e ' my $x = $ARGV[0]; $x =~ s/(`[^`]+`)/chomp(my $y = eval $1); $y/eg; print "$x\n"; ' 'DMY_`date +%d%m%Y`_MY_`date +%m%Y`_Y_`date +%Y`.log' DMY_21122019_MY_122019_Y_2019.log #### package Pm_11110263_FilenameGen; use strict; use warnings; use Exporter 'import'; our @EXPORT_OK = qw{gen_filename}; my %dispatch = ( 'DATE DMY' => sub { my ($d, $m, $y) = (localtime)[3..5]; return join '', $d, $m+1, $y+1900; }, 'DATE MY' => sub { my ($m, $y) = (localtime)[4,5]; return join '', $m+1, $y+1900; }, 'DATE Y' => sub { return (localtime)[5] + 1900; }, ); sub _perform_substitution { my ($token) = @_; die "FATAL! '$token' is invalid" unless exists $dispatch{$token}; return $dispatch{$token}->(); } sub gen_filename { my ($template) = @_; $template =~ s/~([^~]+)~/_perform_substitution($1)/eg; return $template; } 1; #### $ perl -E ' use lib "."; use Pm_11110263_FilenameGen "gen_filename"; say gen_filename($ARGV[0]); ' 'daily_~DATE DMY~_monthly_~DATE MY~_yearly_~DATE Y~.log' daily_21122019_monthly_122019_yearly_2019.log #### $ perl -E ' use lib "."; use Pm_11110263_FilenameGen "gen_filename"; say gen_filename($ARGV[0]); ' 'daily_~DATE DMY~_monthly_~DATE MY~_yearly_~DATE Y~_BAD_~RM ROOT~.log' FATAL! 'RM ROOT' is invalid at Pm_11110263_FilenameGen.pm line 26.