Perl 为什么不是';t eq使用我的字符串输入?
刚开始学习Perl,也就是学习程序流——计算字符串和数字以及使用适当运算符之间的主要区别。简单的脚本,我在这里是驾驶我疯狂,因为它是一个超级简单的,如果否则的声明,应该对“迈克”进入运行,并没有工作。它输出else语句。请帮忙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
#!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是一个列表变量,我就想起来了。再次感谢。