How to use shell variables in perl command call in a bash shell script?
Variables from the shell are available in Perl's %ENV
hash. With bash
(and some other shells) you need to take the extra step of "exporting" your shell variable so it is visible to subprocesses.
mydate=10/10/2012
export mydate
perl -e 'print "my date is $ENV{mydate}\n"'
The same way you pass values to any other program: Pass it as an arg. (You might be tempted to generate Perl code, but that's a bad idea.)
Dt=$( perl -MPOSIX -e'print strftime $ARGV[0], localtime time-86400;' -- "$myDate" )
Note that code doesn't always return yesterday's date (since not all days have 86400 seconds). For that, you'd want
Dt=$( perl -MPOSIX -e'my @d = localtime time-86400; --$d[4]; print strftime $ARGV[0], @d;' -- "$myDate" )
or
Dt=$( perl -MDateTime -e'print DateTime->today(time_zone => "local")->subtract(days => 1)->strftime($ARGV[0]);' -- "$myDate" )
or simply
Dt=$( date --date='1 day ago' +"$myDate" )
Using "
instead of '
also passes shell variables to perl in version 5.24.
mydate=22/6/2016
perl -e "print $mydate"