Почему я не могу сопоставить свою строку из стандартного ввода в Perl?

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

Я слежу за видео на 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.

 brian d foy23 сент. 2010 г., 09:08
Какое видео на YouTube? Может быть, кому-то нужен LART.
 Wooble23 сент. 2010 г., 05:14
Конечно, он проверяет оператор if. Это нелепое утверждение.
 Eric Strom23 сент. 2010 г., 05:39
Добавление к Wooble: в целом, и особенно при изучении языка, когда язык, кажется, совершает ошибку, вероятно, именно вы
 Eric Strom23 сент. 2010 г., 05:45
Хороший способ проверить что-то вроде этого (где очевидно истинное утверждение ложно) - проверить ваши аргументы, в данном случае утверждениеprint "'$name'\n"; до того, как ваше заявление if показало бы вам проблему немедленно

Ответы на вопрос(3)

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

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

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

chomp($name = <STDIN>);

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

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

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

The name is [Jon
]

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

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

 brian d foy23 сент. 2010 г., 21:57
Да, последняя версия Apress по определению новее. Это тоже лучше. Как общий совет, не покупайте старые компьютерные книги. Купите самые последние. Они не только должны охватывать больше недавних функций, но и хорошие авторы исправляют проблемы, обнаруженные в более ранних версиях.
 ianc121523 сент. 2010 г., 20:33
Снять я уже купил его, и он поставляется. Ну что ж, вы говорите, что Apress делает лучшую версию, которая новее?
 ianc121523 сент. 2010 г., 18:12
Мне нужно будет найти эту книгу, я уже купил Perl для чайников и начинающих Perl в прессе Wrox.
 brian d foy23 сент. 2010 г., 18:26
Не используйте ни один из них. Они не только древние, но и не являются хорошим способом изучения Perl. Если вы хотите Beginning Perl, получите последнюю версию от Apress, а не от Wrox.
 brian d foy23 сент. 2010 г., 21:57
И есть список хороших книг по Perl в текущем perlfaq2 (и в будущем perlbook).
Решение Вопроса

Заявление$name = <STDIN>; читает со стандартного ввода и включает завершающий символ новой строки "\nMsgstr "Удалить этот символ, используя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";
}
 ianc121523 сент. 2010 г., 18:11
Идеальный ответ, спасибо.

Ваш ответ на вопрос