2016-03-23 7 views
0

Я пытаюсь запустить скрипт perl внутри сценария unix. Но, выполняя его, я получаю сообщение об ошибке. Он отлично работает без функции timegm() perl. Вот код и сообщение об ошибке.perl timegm() ошибка внутри сценария оболочки unix

#!/Bin/КШ

echo "I M IN KSH" 
    i=10 
    echo "value of i in ksh is $i" 
    perl << _MYCODE_ 

    print "I M IN PERL\n"; 
    use Time::Local; 

    my \$i = $i;  
    print "Value of i in perl $i\n";  
    $time_epoo = timegm(13,06,22,29,2,2016-1900);  

    print "$time_epoo" 

    _MYCODE_ 

    echo "BACK IN KSH" 

------------------------OUTPUT WITH ERROR-------------- 
I M IN KSH 
value of i in ksh is 10 
syntax error at - line 7, near "=" 
Execution of - aborted due to compilation errors. 
BACK IN KSH 
------------------------------------------------------- 
+1

я не знаю правила КШ интерполяции, но я предполагаю, что первый $ в «моем \ $ I = $ я» экранируются, чтобы предотвратить Ksh от интерполирования Это. Если это так, почему бы не избежать $ in "$ time_epo = ..."? Я думаю, ответ mkHun устранит любую потенциальную двусмысленность в переменной интерполяции и устранит вашу проблему. –

ответ

2

использование -e флаг для Perl для выполнения. Затем передайте переменную оболочки в perl-скрипт, используя метод аргумента. Затем обрабатывают значение внутри Perl, используя $ARGV[0]

echo "I M IN KSH" 
i=10 
echo "value of i in ksh is $i" 
perl -e ' 

print "I M IN PERL\n"; 
use Time::Local; 

my $i = $ARGV[0]; 
print "Value of i in perl $i\n"; 
$time_epoo = timegm(13,06,22,29,2,2016-1900); 

print "$time_epoo" 

' $i 

echo "BACK IN KSH" 
Смежные вопросы