2017-05-03 18 views
-2

私はPerlプログラムを書こうとしています。プログラムは単純です。変数$ aと$ bが1の場合、何かが印刷されます。しかし、キャッチはプログラムがチェックする必要があります$ var == 1の場合にのみ$ bの値を返します。それ以外の場合は、$ $ var == 0の場合は$ a値のみをチェックする必要があります。複数の条件チェックPerl

私はエラーを取得していますネストされたif.Butを使用してそれを書くことを試みた。(私はそれを、それはマクロを使ってCで行うことができる方法と同じ方法を実行しようとしました。)

my $var = 1 ; 

my $a = 1 ; 
my $b = 1 ; 

if(($a == 1) 
{ 
if($var == 1) 
{ 
&& ($b == 1) 
} 

) 

print " hey ,it worked " ; 

} 

ケース:1)$ var == 1だから、印刷する前に$ bの値を調べなければなりません。

my $var = 1 ; 

my $a = 1 ; 
my $b = 0 ; 

if(($a == 1) 
{ 
if($var == 1) 
{ 
&& ($b == 1) 
} 

) 

print " hey ,it worked " ; 

} 

ケース:2)$ b == 0、何も印刷されません。

my $var = 0 ; 

my $a = 1 ; 
my $b = 1 ; 

if(($a == 1) 
{ 
if($var == 1) 
{ 
&& ($b == 1) 
} 

) 

print " hey ,it worked " ; 

} 

ケース:3)$するvar == 0は、それが$ bの値をチェックしてはならないと行が印刷されます。 私は上記の結果を得るべきです。しかし、私はそれを行う方法を得ていません。親切に助けてください。

あなたは私のquestion.Whatを理解していなかったreplies.Butためのおかげで、私が本当にやりたいが帰り、私は

、.hファイル内のようなものをマクロを定義しますC言語でプログラムを書いていた、あります
#define SWITCH 1 

.cファイルでは、条件を確認します。

if((a == 1) 
#if SWITCH 
     && (b == 1)  
     ) 
     { 
     print " hey ,it worked " ; 
     } 

だから、ここ

#define SWITCH 0 

、bは値が0に変更されfile.Ifマクロ値のスイッチが.hの中で1である場合にのみ、チェックされます$その後、print文は、のみに依存しますaとbの値はチェックされません。私はPerlで同じことをしたいと思います。

答えて

1

これは、あなたがそれを英語で説明するように、チェックを実行します。

if ($var ? $a && $b : $a) 

これは単純まだ同等のチェックです:

if ($a && (!$var || $b)) 
+0

reply.Iのおかげでは、質問を編集しました。私を案内してください –

+1

Perlにはマクロがありません。そのレベルの最適化が必要な場合は、最初にPerlを使用すべきではありません。 – ikegami

+0

ええ、私は知っていますが、このperlを実装する最も近い方法は何ですか?const SWITCH => 1または何かを使用してください... –

1
if ($a == 1) { 
    if(($var != 1) || ($var == 1 && $b == 1) ) { 
     say " hey ,it worked " ; 
    } 
} 
+2

真偽をチェックするのに' == 0'と '== 1 'を使うべきではありません。 – ikegami

+1

'$ var == 1 &&'はまったく役に立たない。 – ikegami

+1

同意するが、OPは彼が真実をチェックしているとは言わない(彼は数値をチェックしているかもしれない)。そして、はい、この声明は機械にとっては全く役に立たないが、人間にとってはそうでないかもしれない。だから私は読みやすさのためにそれを含めた –