Я сейчас на каникулах и решил потратить свое время на изучение 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>
или есть сценарии, где это не нужно?