如果有和/|| / && 在 perl 中
If with and / || / && in perl
我正在尝试查看用户是否在 perl 中使用了正确的字母,但这种方式行不通
chop($reply = <STDIN>);
if($reply ne "a" || $reply ne "b" || $reply ne "c" || $reply ne "d") {print " !!! ERROR !!!\n";}
如果您已经了解正则表达式,您可能想要测试它们:
chomp ($reply=<STDIN>);
if ($reply !~/^[a-d]$/) {print 'Error'}
你的逻辑有问题。您的条件始终为真,因为 "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]$/ ) { ... }
最后,如果有更多选项或选项更复杂,您可以使用哈希进行调度 table。这要高级得多,但可以与子例程引用结合使用。 Higher Order Perl.
中有一章是关于他们的
您使用要允许的值创建一个散列作为键,然后您可以使用 exists
检查该值是否被允许。
my %allowed = (
a => 1,
b => 1,
c => 1,
d => 1,
);
if ( !exists $allowed{$reply} ) { ... }
我正在尝试查看用户是否在 perl 中使用了正确的字母,但这种方式行不通
chop($reply = <STDIN>);
if($reply ne "a" || $reply ne "b" || $reply ne "c" || $reply ne "d") {print " !!! ERROR !!!\n";}
如果您已经了解正则表达式,您可能想要测试它们:
chomp ($reply=<STDIN>);
if ($reply !~/^[a-d]$/) {print 'Error'}
你的逻辑有问题。您的条件始终为真,因为 "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]$/ ) { ... }
最后,如果有更多选项或选项更复杂,您可以使用哈希进行调度 table。这要高级得多,但可以与子例程引用结合使用。 Higher Order Perl.
中有一章是关于他们的您使用要允许的值创建一个散列作为键,然后您可以使用 exists
检查该值是否被允许。
my %allowed = (
a => 1,
b => 1,
c => 1,
d => 1,
);
if ( !exists $allowed{$reply} ) { ... }