Jestem teraz na przerwie od zajęć i postanowiłem spędzić czas na nauce Perla. Pracuję z Beginning Perl (http://www.perl.org/books/beginning-perl/) i kończę ćwiczenia na końcu trzeciego rozdziału.Szukam wyjaśnienia na temat chomp
Jedno z ćwiczeń zadawało mi pytanie "Zapisuję twoje ważne numery telefonów w haśle. Napisz program, aby wyszukać numery według nazwiska osoby".
W każdym razie, ja wymyślił to:
#!/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";
A to po prostu nie będzie działać. Ciągle otrzymuję ten komunikat o błędzie: (.)
wykorzystanie wartości niezainicjowanych w konkatenacji lub ciąg w hello.plx linii 17, wiersz 1
Próbowałem odtwarzanie z kodem nieco więcej, ale każde "rozwiązanie" wyglądało na bardziej złożone niż "rozwiązanie", które było przed nim. W końcu postanowiłem sprawdzić odpowiedzi.
Jedyną różnicą między moim kodem a odpowiedzią była obecność chomp ($input);
po <STDIN>;
.
Teraz autor użył wcześniejszego przykładu chomp
, ale tak naprawdę nie wiedział, co robi chomp
. Tak, znalazłem to odpowiedź na www.perlmeme.org:
Funkcja
chomp()
usunie (zazwyczaj) dowolny znak nowej linii z końcu łańcucha. Powodem mówimy zazwyczaj jest to, że faktycznie usuwa dowolny znak, który odpowiada aktualnej wartości$/
(rekord separatora wejście ) i$/
domyślne do nowej linii ..
W każdym razie, moje pytania są :
Jakie nowe linie są usuwane? Czy Perl automatycznie dołącza
"\n"
do wejścia z<STDIN>
? Jestem trochę niejasna, ponieważ kiedy przeczytałem "to faktycznie usuwa jakąkolwiek postać, która pasuje do aktualnej wartości$/
", nie mogę pomóc, ale myślę "nie pamiętam umieszczania$/
w moim kodzie."Chciałbym opracować najlepsze praktyki tak szybko, jak to możliwe - czy najlepiej jest zawsze dodawać
chomp
po<STDIN>
lub czy istnieją scenariusze, w których nie jest to konieczne?
'perldoc -f chomp' lub [perlfunc] (http://perldoc.perl.org/perlfunc.html) –
Ok, więc wejście chomp w Perlmeme w FAQ (http: //www.perlmeme.org/faqs/manipulating_text/chomp.html) odpowiada na większość mojego pierwszego pytania. Oznacza to, że najczęściej zadawane pytania pozwalają mi sądzić, że Perl automatycznie tworzy nowy znak (niekoniecznie w "\ n", ale znak nowej linii jest taki sam). Ale czy rozumiem to poprawnie? – krebshack
Kontynuacja z linkiem z perlfunc: [chomp] (http://perldoc.perl.org/functions/chomp.html), który opisuje użycie separatora. –