如何比较Perl中的单个字符串?现在,我正在尝试使用“eq”:
print "Word: " . $_[0] . "\n";
print "N for noun, V for verb, and any other key if the word falls into neither category.\n";
$category = <STDIN>;
print "category is...." . $category . "\n";
if ($category eq "N")
{
print "N\n";
push (@nouns, $_[0]);
}
elsif($category eq "V")
{
print "V\n";
push (@verbs, $_[0]);
}
else
{
print "Else\n";
push(@wordsInBetween, $_[0]);
}
但它不起作用。无论输入如何,始终执行else块。
答案 0 :(得分:13)
您如何接受$category
的价值?如果像my $category = <STDIN>
那样完成,则必须在最后通过以下方式选择换行符:
chomp( my $category = <STDIN> );
答案 1 :(得分:2)
eq是正确的。据推测,$ category既不是“N”也不是“V”。
也许$ category中有意想不到的空白?
答案 2 :(得分:2)
***@S04:~$ perl -we '$foo = "f"; print "Success\n" if ($foo ne "e")'
Success
***@S04:~$ perl -we '$foo = "f"; print "Success\n" if ($foo eq "e")'
***@S04:~$
您是否尝试过检查$category
实际上是什么?有时这些东西可能会被我们中最好的人所忽视......也许它只是小写的,或完全不同的东西。
当我遇到意想不到的错误时,我倾向于在我想要打印的内容周围使用带分隔符的打印件,因此我知道它实际开始和结束的位置(与我的想法可能解释的相反)。
print "|>${category}<|";
需要注意的是Data::Dumper:
use Data::Dumper;
print Dumper(\$category);
答案 3 :(得分:0)
与 eq 相比,效果很好。也许你应该在你的else块中输出 $ category 的值来看看它到底是什么?将输出括在引号中,以便查看是否存在任何周围的空格。
此外,如果您希望比较不区分大小写,请尝试:
if (uc($category) eq 'N') {
答案 4 :(得分:0)
如果我可以使用Perl 5.10,我将如何编写它。
#! perl
use strict;
use warnings;
use 5.010;
our( @nouns, @verbs, @wordsInBetween );
sub user_input{
my( $word ) = @_;
say "Word: $word";
say "N for noun, V for verb, and any other key if the word falls into neither category.";
$category = <STDIN>;
chomp $category;
say "category is.... $category";
given( lc $category ){
when("n"){
say 'N';
push( @nouns, $word );
}
when("v"){
say 'V';
push( @verbs, $word );
}
default{
say 'Else';
push( @wordsInBetween, $word );
}
}
}