2014-04-15 3 views
-2

у меня есть:Синтаксические ошибки при попытке использовать IFDEF

if($^O eq 'MSWin32'){ 
    export WINDOWS=1 
else{ 
    export UNIX=1 
} 

=begin WINDOWS 
    use feature qw(switch); 
=cut 
=begin UNIX 
    use Switch; 
=cut 

И я получаю: ошибка

синтаксис в C: \ build.pl линия 6, рядом с "другой" НАЧАТЬ не безопасно после ошибок - компиляций несостоявшихся в C: \ build.pl линии 17.

+1

Это было сказано ниже, но я скажу здесь: не используйте переключатель в любой форме. Если вы все равно перепишете свою программу, перепишите ее, чтобы вместо нее использовать if-elsif-else. Нет никакой пользы от использования переключателя (любой версии), и он обе устарел и экспериментален. – TLP

ответ

8

В том числе Борн команд оболочки в программе Perl ... вряд ли будет работать.

if ($^O eq 'MSWin32') { 
    $ENV{WINDOWS}=1; 
}else{ 
    $ENV{UNIX}=1; 
} 

Я не понимаю, что следует. Затем вы отмечаете код как документацию, но это не похоже на то, что вы пытаетесь сделать. Похоже, вы пытаетесь сделать следующее:

use if $^O eq 'MSWin32', 'feature', qw(switch); 
use if $^O ne 'MSWin32', 'Switch'; 

Но это не имеет никакого смысла. Функция коммутатора и модуль коммутатора никоим образом не являются взаимозаменяемыми, и оба они работают в Windows и в системах, отличных от Windows.

+0

Спасибо. Я столкнулся с проблемой того, что Unix perl устарел, и обновление может быть невозможно в это время. Из-за этого я собирался использовать switch sytax для Unix и синтаксис for/When для Windows. Таким образом, в скрипте было бы несколько операторов 'if $^O eq 'MSWin32''. Наверное, не очень изящный способ. – MrDuk

+0

и на самом деле мой скрипт даже не компилируется сейчас ... так что весь этот вопрос может быть спорным. – MrDuk

+2

Как я уже сказал, функция коммутатора и модуль коммутатора никоим образом не взаимозаменяемы – ikegami

2

Вы забыли закрыть if (...) { блок, поставив перед тем }else; то есть, это изменить:

else{ 

к этому:

}else{ 
Смежные вопросы