これは、ターミナル(Windowsコマンドライン)を使用して実行されるPerlプログラムです。コードを繰り返すことなく、両方の条件に対して同じコードブロックを使用するステートメントの場合、「これとこれが真の場合、またはこれとこれが真の場合」を作成しようとしています。
if ($name eq "tom" and $password eq "123!") elsif ($name eq "frank" and $password eq "321!") {
print "You have gained access.";
} else {
print "Access denied!";
}
シンプル:
if ( $name eq 'tom' && $password eq '123!'
|| $name eq 'frank' && $password eq '321!'
) {
(優先度の高い&&
および||
式で、一般的な優先順位エラーを回避するために、フロー制御用にand
およびor
を予約)
より良い:
my %password = (
'tom' => '123!',
'frank' => '321!',
);
if ( exists $password{$name} && $password eq $password{$name} ) {
スクリプトにパスワードを保存することはお勧めしませんが、これはあなたが指示する方法です:
use 5.010;
my %user_table = ( tom => '123!', frank => '321!' );
say ( $user_table{ $name } eq $password ? 'You have gained access.'
: 'Access denied!'
);
このような関連付けを強制する場合は、tableと考えるのが得策です。Perlで最も一般的な形式のテーブルはハッシュです。
if ( ($name eq "tom" and $password eq "123!")
or ($name eq "frank" and $password eq "321!")) {
print "You have gained access.";
}
else {
print "Access denied!";
}
(他の人々:ここのJohn Doeは実際にはパスワードをハードコーディングしていないと確信しています。彼は単にそれを例として使用しているだけです。)