2017-02-09 48 views
-6

我是Perl的新手,編寫一個簡單的腳本來檢查VMware Fusion的安裝版本是否大於8.4。我得到這個錯誤:Perl新手 - 浮點比較遇到問題

syntax error at ./test.pl line 8, near ");" 

這是腳本:

@vmVersion = `defaults read /Applications/VMware\ Fusion.app/Contents/Info CFBundleShortVersionString`; 

@vmMinimum = 8.4; 

if($vmVersion > $vmMinimum); 

then print "compliant"; 

else print "update required"; 

fi 
+3

請您[代碼塊格式化你的代碼(http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks) – yeputons

+5

始終使用'使用嚴格;使用警告qw(全部);'! – ikegami

+2

對Perl的語法進行大膽的猜測並沒有任何意義,然後在遇到語法錯誤時會感到驚訝。這些東西非常容易在互聯網上查找。 – Borodin

回答

1

你有代碼不是Perl的。下面是可能看起來更像是Perl的:

my $vmVersion = `defaults read '/Applications/VMware Fusion.app/Contents/Info' CFBundleShortVersionString`; 
if ($vmVersion > 8.4) { 
    print "compliant"; 
} else { 
    print "update required"; 
} 

注意兩件事情:

  1. 版本號是不是浮點數。您應該使用語義版本庫(例如SemVer)進行版本比較。
  2. 您的消息應該包含換行符(\n)。如果沒有這些,當用戶運行你的程序時,他們的提示將在後面的一個有趣的位置打印出來。 :-)
+1

'嚴格使用;使用警告qw(全部);'...它甚至會發現OP的一個問題。 – ikegami

+1

Perl帶來的['version' pragma](https://metacpan.org/pod/distribution/version/lib/version.pm)應該也很好,如果那些版本號在語義上類似於那些用於Perl世界。 – simbabque

0

我從來沒有見過

if($vmVersion > $vmMinimum); 
... 
fi 

在Perl中之前,有塊大括號取代。

if($vmVersion > $vmMinimum) { 
... 
}