2017-05-03 80 views
-2

我正在尝试编写一个Perl程序。该程序很简单。如果变量$ a和$ b等于1,那么就会打印一些东西。但是catch程序必须检查对于$ b的值,只有在$ var == 1的情况下才行。否则,如果$ $ 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的值并打印出该行。 我应该得到上面提到的结果,但我没有得到如何去做。亲切的帮助。

感谢replies.But你不明白我的疑问。我真正想要做的是,回来的路上我已经用C语言编写一个程序,我将定义在.h文件中类似的宏,

#define SWITCH 1 

在.c文件中,我将检查条件。

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

所以,在这里$ B将被检查,只有在宏观值开关在.H 1文件。如果该值变为0,

#define SWITCH 0 

然后打印语句只取决于a和b值的值不会被检查。我想在Perl中做同样的事情。

回答

1

此执行,你的英文描述它的检查:

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

这是一个简单但等价检查:

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

感谢reply.I已编辑的问题。请指导我 –

+1

Perl没有宏。如果你需要这样的优化,你不应该首先使用Perl。 – ikegami

+0

是的,我知道,但是实现这个perl的最接近的方式是什么?使用常量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没有说他正在检查真相(他可能正在检查数值)。是的,这个说法对一台机器来说完全没用,但也许不适合人类?所以我把它包括在内以便阅读。 –