2016-03-23 20 views
0

Bir unix komut dosyası içinde perl betiği çalıştırmaya çalışıyorum. Ama bunu yürütürken bir hata alıyorum. Timegm() perl işlevi olmadan iyi çalışıyor. İşte kod ve hata mesajı.perl timegm() hatası

#!/Bin/ksh

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

kullanarak Perlde içindeki değerini işlemek ama ilk $ tahmin ediyorum "benim \ $ i $ i =" interpolating gelen ksh önlemek için kaçan edilir o. Bu durumda, neden $ "$ time_epo = ..." da kaçmadı? Bence mkHun'un cevabı, değişken enterpolasyondaki herhangi bir potansiyel belirsizliği kaldıracak ve probleminizi çözecektir. –

cevap

2

kullanım yürütmek için Perl için -e bayrağı. Ardından argüman yöntemini kullanarak kabuk değişkenini perl betiğine geçirin. Sonra gerçekten Ksh enterpolasyon kurallarını bilmiyorum $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"