Perl 为什么不是';t eq使用我的字符串输入?

Perl 为什么不是';t eq使用我的字符串输入?,perl,if-statement,flow,Perl,If Statement,Flow,刚开始学习Perl,也就是学习程序流——计算字符串和数字以及使用适当运算符之间的主要区别。简单的脚本,我在这里是驾驶我疯狂,因为它是一个超级简单的,如果否则的声明,应该对“迈克”进入运行,并没有工作。它输出else语句。请帮忙 #!C:\strawberry\perl\bin\perl.exe use strict; #use warnings; #use diagnostics; print("What is your name please?"); $userName = <STD

刚开始学习Perl,也就是学习程序流——计算字符串和数字以及使用适当运算符之间的主要区别。简单的脚本,我在这里是驾驶我疯狂,因为它是一个超级简单的,如果否则的声明,应该对“迈克”进入运行,并没有工作。它输出else语句。请帮忙

#!C:\strawberry\perl\bin\perl.exe

use strict;
#use warnings;
#use diagnostics;

print("What is your name please?");
$userName = <STDIN>;


if($userName eq "mike"){
    print("correct answer");
}
else{
    print("Wrong answer");
}
#!C:\草莓\perl\bin\perl.exe
严格使用;
#使用警告;
#使用诊断;
打印(“请问你叫什么名字?”);
$userName=;
如果($userName eq“mike”){
打印(“正确答案”);
}
否则{
打印(“错误答案”);
}

从STDIN获得价值后,尝试向chomp添加调用:

$userName = <STDIN>;
chomp($userName);
$userName=;
chomp($userName);

因为从STDIN读入的值的末尾将有一个换行符。内置的chomp()将删除字符串末尾的换行符。

当我读到你的问题时,我以为你会遇到字符串与equals中的数值之间的问题。考虑以下情况:

#!/usr/bin/env perl

use strict;
use warnings;

print("What is the meaning of life, the universe and everything? ");
chomp(my $response = <STDIN>);

if ( $response == 42) {
#if ( 42 ~~ $response ) {
    print "correct answer\n";
} else {
    print "Wrong answer\n" ;
}
#/usr/bin/env perl
严格使用;
使用警告;
印刷品(“生命、宇宙和一切的意义是什么?”);
chomp(我的$response=);
如果($response==42){
#if(42~~$response){
打印“正确答案\n”;
}否则{
打印“错误答案\n”;
}

尝试两种不同的
if
语句。回答类似
family
的问题,看看会发生什么。
~
是智能匹配操作符,它在Perl中帮助解决了一些问题。请阅读更多相关信息(在“详细智能匹配”下)。请注意
chomp
运算符的内联使用。

您试过调试您的程序吗?$userName的值是多少?$userName的值将是用户输入的任何值,作为标量变量使用.Right。但它包括用户也输入的换行符。您的比较没有考虑到这一点。davorg是一个sking如果你曾经尝试打印
$userName
的值,看看里面到底有什么。我有。我一开始是这样做的,因为据我所知,STDIN将其用作标量变量,它只打印了“mike”。再次非常感谢。非常感谢。我可以想象原因。但是这些“尝试”答案没有特别的帮助。如果你不明白为什么,即使正确的解决方案仍然是cargo cult。我只是在编辑更完整的描述时记下了它。坏习惯,对不起(可能是因为在我写长答案的时候,有人写了很多短的东西。)谢谢Fd!。当然-STDIN会在结尾加上\n字符,不是吗?。非常感谢,你实际上是正确的。我必须记住这一点,同时我也会踢自己,因为我学到了这一点,只是忘记了它。你一说STDIN是一个列表变量,我就想起来了。再次感谢。