我怎么能得到...其他工作?

Mat*_*rio 2 string perl if-statement

我写了一个Perl程序,用户应该键入一个用户名.如果他们进入admin,他们应该看到消息

Welcome, admin!
Run Code Online (Sandbox Code Playgroud)

否则控制台输出应该是

The username is incorrect
Run Code Online (Sandbox Code Playgroud)

这是我的代码

use utf8;

print "Username: ";

$username = <STDIN>;

if ( $username eq "admin" ) {
    print "Welcome, admin!";
}
else {
    print "The username is incorrect.";
}
Run Code Online (Sandbox Code Playgroud)

但无论用户输入什么,程序都会进入else分支机构.

为什么会这样?

tin*_*ita 8

每当您不确定比较失败的原因时,请确保您知道变量中的内容:

use Data::Dumper;
local $Data::Dumper::Useqq = 1;
print Dumper $variable;
# print Dumper \@array;
# print Dumper \%hash;
Run Code Online (Sandbox Code Playgroud)

像@ikegami建议的那样,你需要使用chomp:

chomp $username;
Run Code Online (Sandbox Code Playgroud)

perldoc -f chomp


Bor*_*din 5

<>操作符通常是输入的最佳选择.它将从命令行中命名的任何文件中读取数据,如果没有,则从键盘读取数据

$username = <STDIN>将从键盘上读取,如果您输入admin,则输入键将包含"admin\n".所以你需要chomp输入结尾的LF字符

你也应该use strictuse warnings 'all'在每一个Perl程序开始

像这样

use strict;
use warnings 'all';

print "Username: ";
my $user_name = <>;
chomp $user_name;

if ( $user_name eq 'admin' ) {
    print "Welcome, admin!\n";
}
else {
    print "The username is incorrect\n";
}
Run Code Online (Sandbox Code Playgroud)