Perl - 多条件if语句没有重复代码?

时间:2014-02-13 15:57:57

标签: perl if-statement

这是一个使用终端(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!";

}

3 个答案:

答案 0 :(得分:18)

简单:

if ( $name eq 'tom' && $password eq '123!'
    || $name eq 'frank' && $password eq '321!'
) {

(在表达式中使用高优先级&&||,为流量控制保留andor,以避免常见的优先级错误。

更好:

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在这里实际上并不是硬编码密码;他只是以它为例。)