如果带有和 / ||/ &&& in perl

  • 本文关键字:in perl 如果 perl
  • 更新时间 :
  • 英文 :


我想看看用户是否使用正确的字母在perl中,但它不工作的方式

chop($reply = <STDIN>);
if($reply ne "a" || $reply ne "b" || $reply ne "c" || $reply ne "d") {print " !!! ERROR !!!n";}

你的逻辑有缺陷。条件总是成立的,因为"a" ne "b"总是成立的。不管你输入的是哪一个字母,其他的都会失败。

有几种方法可以重写这个条件。

最冗长的是使用逻辑,而不是。你想要这个条件:

输入不是A,输入不是B,输入不是C,输入不是d

if (  $reply ne "a"
&& $reply ne "b"
&& $reply ne "c"
&& $reply ne "d" ) { ... }

如果你想让它不那么冗长,你可以使用模式匹配。这将测试字符串是否与模式不匹配,该模式恰好是字符组中给出的四个字母中的一个。该组也可以写入范围为[a-d]

if ( $reply !~ m/^[abcd]$/ ) { ... }

最后,如果有更多的选项或选项更复杂,您可以使用散列创建调度表。这要高级得多,但可以与子例程引用结合使用。高级Perl中有一章是关于它们的。

你用你想要允许的值作为键创建一个散列,然后你可以使用exists来检查该值是否被允许。


my %allowed = ( 
a => 1, 
b => 1, 
c => 1, 
d => 1,
);
if ( !exists $allowed{$reply} ) { ... }

如果您已经了解了正则表达式,那么您可能想要针对正则表达式进行测试:

chomp ($reply=<STDIN>);
if ($reply !~/^[a-d]$/) {print 'Error'} 

最新更新