2016-03-23 9 views
0

私はUNIXスクリプト内でperlスクリプトを実行しようとしています。しかし、それを実行している間私はtimegm()perl関数なしでうまく動作します。ここにコードとエラーメッセージがあります。UNIXシェルスクリプト内のperl timegm()エラー

#!/ 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

を使用してperlの内部で値を扱いますそれ。この場合、なぜ "$ time_epo = ..."の$もエスケープされていないのですか?私はmkHunの答えは、変数補間の潜在的なあいまいさを削除し、あなたの問題を解決すると思います。 –

答えて

2

使用実行するperlに関する-eフラグ。次に、引数のメソッドを使ってシェル変数をperlスクリプトに渡します。その後、私は本当にkshの補間ルールを知らないが、私は「私の\ $ iは= $ iは、」補間からkshのを防ぐためにエスケープされての最初の$を推測している$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"