необходим:
час на каникулах и решил потратить время на изучение Perl. Я работаю с Beginning Perl (http://www.perl.org/books/beginning-perl/) и я заканчиваю упражнения в конце третьей главы.
В одном из упражнений я попросил меня: «Храните ваши важные телефонные номера в хэше. Напишите программу для поиска номеров по имени человека».
Во всяком случае, я придумал это:
#!/usr/bin/perl
use warnings;
use strict;
my %name_number=
(
Me => "XXX XXX XXXX",
Home => "YYY YYY YYYY",
Emergency => "ZZZ ZZZ ZZZZ",
Lookup => "411"
);
print "Enter the name of who you want to call (Me, Home, Emergency, Lookup)", "\n";
my $input = <STDIN>;
print "$input can be reached at $name_number{$input}\n";
И это просто не сработает. Я продолжал получать это сообщение об ошибке:
Использование неинициализированного значения в конкатенации (.) Или строка в hello.plx строка 17, строка 1
Я попытался немного поиграться с кодом, но каждое «решение» выглядело более сложным, чем «решение», которое было до него. Наконец я решил проверить ответы.
Единственная разница между моим кодом и ответом заключалась в наличииchomp ($input);
после<STDIN>;
.
Теперь автор использовалchomp
в предыдущем примере, но он на самом деле не охватывает то, чтоchomp
делал. Итак, я нашел этот ответ на www.perlmeme.org:
chomp()
Функция удалит (обычно) любой символ новой строки в конце строки. Причина, по которой мы обычно говорим, заключается в том, что он на самом деле удаляет любой символ, который соответствует текущему значению$/
(разделитель входных записей) и$/
по умолчанию переводится на новую строку ..
Во всяком случае, мои вопросы:
Какие новые строки удаляются? Perl автоматически добавляет"\n"
на вход от<STDIN>
? Мне просто немного непонятно, потому что, когда я читаю ", он фактически удаляет любой символ, который соответствует текущему значению$/
"Я не могу не думать" Я не помню, чтобы положить$/
где-нибудь в моем коде. "
Я хотел бы как можно скорее разработать лучшие практики - лучше ли всегда включатьchomp
после<STDIN>
или есть сценарии, где это не нужно?