Почему eq не работает с моим вводом строки? - PullRequest
3 голосов
/ 03 февраля 2011

Только что начал изучать Perl, а именно изучать поток программ - основные заметные различия между оценкой строк и чисел и использованием соответствующих операторов. Простой сценарий, который я здесь привел, сводит меня с ума, поскольку это супер простое, если еще утверждение, которое должно при вводе «mike» работать и не работает. Вместо этого он выводит оператор 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");
}

Ответы [ 2 ]

11 голосов
/ 03 февраля 2011

Попробуйте добавить вызов chomp после получения значения из STDIN:

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

Поскольку значение, считываемое из STDIN, будет иметь символ новой строки в конце. Встроенная функция chomp () удалит символ новой строки в конце строки.

1 голос
/ 04 февраля 2011

Когда я читал ваш вопрос, я подумал, что у вас возникнут проблемы со строками в сравнении с числовыми значениями в уравнениях.Рассмотрим следующий случай:

#!/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" ;
}

Попробуйте два разных оператора if.Ответь на что-нибудь приятное, например family, и посмотри, что получится.~~ - это оператор интеллектуального сопоставления, который помог решить некоторые из этих проблем в Perl.Подробнее об этом здесь (в разделе «интеллектуальное сопоставление в деталях»).Обратите внимание также на встроенное использование оператора chomp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...