2014-09-25 25 views
2

我需要從一個Perl腳本塊的代碼片段,比如你可以在C與#ifdef就做:如何在C中像使用#ifdef一樣禁用Perl中的代碼塊?

#define ANDROID true 

#ifdef ANDROID 
     # Execute code for Android only 
#else 
     # Execute code for Linux, Windows and other platforms 
#endif 

我怎麼能在Perl中做到這一點?我們需要儘可能少地改變我們的腳本(有將近一千個腳本,我們需要讓我們的代碼儘可能通用)。所以我只需要知道什麼是最好的機制來實現類似於C#ifdefs的東西。

+0

你是什麼意思的「塊代碼?」有條件地執行? – ThisSuitIsBlackNot 2014-09-25 21:55:46

+0

不,我不能使用評論。我們爲一個平臺定義了一套龐大的perl腳本。我需要將其移植到其他平臺,並進行簡單的更改,因此我需要能夠將該平臺設置爲#define ANDROID,然後使用它來使代碼只能在Android上運行,而不能在其他平臺上運行... – user2970477 2014-09-25 21:56:10

+0

除非您嚴重依賴外部命令,大多數Perl代碼應該[相當便攜](http://perldoc.perl.org/perlport.html)。這就是使用Perl的美妙之處,比方說,C。 – ThisSuitIsBlackNot 2014-09-25 21:56:55

回答

5

從您的評論看來,您似乎在尋找一種方法使代碼具有可移植性,運行時可以運行不同的代碼OS更改。如果是這樣,你可以使用built-in variable $^O

if ($^O eq "Android") {  # run Android code 
    .... 
} 
elsif ($^O eq "MSWin32") {  # run windows code 
    .... 
} 
else { 
    ... 
} 
+1

更好的做法是定義常量,例如'use constant IS_ANDROID =>($^O eq「Android」);'然後在條件中使用它們'如果(IS_ANDROID){...}'。這將允許任何去往其他平臺的代碼塊在編譯時被優化掉。 – tobyink 2014-09-25 22:55:46

+1

......我可能會添加的是C例子中發生的事情。其他平臺的無關代碼不會被編譯。 – tobyink 2014-09-25 23:03:07

+4

解釋問題的良好呼聲。 'if'編譯指示也很有用,例如'如果使用$^O eq'Android','MyModule :: Android'' – Borodin 2014-09-25 23:25:51

相關問題