необходим:

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

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

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