Почему я не могу сопоставить свою строку из стандартного ввода в Perl? - PullRequest
3 голосов
/ 23 сентября 2010

Почему мой скрипт не будет работать правильно?

Я слежу за видео на YouTube и работаю на этого парня.

Я запускаю Perl в Windows, используя ActiveState ActivePerl 5.12.2.1202

Вот мой крошечный крошечный блок кода.

print "What is your name?\n";
$name = <STDIN>;
if ($name eq "Jon") {
print "We have met before!\n";
} else {
print "We have not met before.\n";
}

Код автоматически переходит к оператору else и даже не проверяет оператор if.

Ответы [ 3 ]

18 голосов
/ 23 сентября 2010

Оператор $name = <STDIN>; читает из стандартного ввода и включает завершающий символ новой строки "\n".Удалите этот символ, используя функцию chomp:

print "What is your name?\n";
$name = <STDIN>;
chomp($name);
if ($name eq "Jon") {
  print "We have met before!\n";
} else {
  print "We have not met before.\n";
}
5 голосов
/ 23 сентября 2010

Хитрость в программировании - узнать ваши данные.Когда что-то идет не так, как вы ожидаете, посмотрите на данные, чтобы увидеть, соответствуют ли они вашим ожиданиям.Например:

 print "The name is [$name]\n";

Вы ставите фигурные скобки вокруг него, чтобы увидеть любые дополнительные пробелы, которые могут быть там.В этом случае вы бы увидели:

The name is [Jon
]

Это ваша подсказка, что есть дополнительные вещи.Поскольку eq должен точно соответствовать, он не может соответствовать.

Если вы только начинаете с Perl, попробуйте Learning Perl .Это намного лучше, чем случайные видео с YouTube.:)

4 голосов
/ 23 сентября 2010

Когда вы читаете имя стандартного ввода как $name = <STDIN>;

$name будет иметь завершающий символ новой строки.Поэтому, если я введу foo, $name будет иметь foo\n.

Чтобы избавиться от этой новой строки, вы можете использовать функцию chomp как:

chomp($name = <STDIN>);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...