这是一个使用终端(Windows命令行)运行的Perl程序。我试图创建一个“if this and this is true,或者this and this is true”如果语句使用相同的代码块而不必重复代码。
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!";
}
答案 0 :(得分:18)
简单:
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} ) {
答案 1 :(得分:3)
我不建议在脚本中存储密码,但这是您指明的方式:
use 5.010;
my %user_table = ( tom => '123!', frank => '321!' );
say ( $user_table{ $name } eq $password ? 'You have gained access.'
: 'Access denied!'
);
每当你想要强制执行这样的关联时,最好考虑一个表,而perl中最常见的表格形式就是哈希。
答案 2 :(得分:1)
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在这里实际上并不是硬编码密码;他只是以它为例。)