我正在嘗試查看用戶是否在 perl 中使用了正確的字母,但它不起作用
chop($reply = <STDIN>);
if($reply ne "a" || $reply ne "b" || $reply ne "c" || $reply ne "d") {print " !!! ERROR !!!\n";}
uj5u.com熱心網友回復:
你的邏輯有缺陷。你的條件總是正確的,因為"a" ne "b"
總是正確的。無論您輸入哪個允許的字母,其他字母總是會失敗。
有幾種方法可以重寫此條件。
最冗長的是使用邏輯and而不是or。你想要這個條件:
輸入不是A,輸入不是B,輸入不是C,輸入不是D。
if ( $reply ne "a"
&& $reply ne "b"
&& $reply ne "c"
&& $reply ne "d" ) { ... }
如果您希望它不那么冗長,您可以使用模式匹配來代替。這將測驗字串是否與模式不匹配,模式正是字符組中給定的四個字母之一。該組也可以寫成范圍為[a-d]
。
if ( $reply !~ m/^[abcd]$/ ) { ... }
最后,如果有更多選項或選項更復雜,您可以使用散列制作調度表。這要高級得多,但可以與子例程參考結合使用。在Higher Order Perl中有一個關于它們的章節。
您可以使用您希望允許作為鍵的值創建一個散列,然后您可以使用它exists
來檢查該值是否被允許。
my %allowed = (
a => 1,
b => 1,
c => 1,
d => 1,
);
if ( !exists $allowed{$reply} ) { ... }
uj5u.com熱心網友回復:
如果您已經了解了正則運算式,您可能想要測驗正則運算式:
chomp ($reply=<STDIN>);
if ($reply !~/^[a-d]$/) {print 'Error'}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/467172.html
標籤:perl