Sono in pausa dalle lezioni in questo momento e ho deciso di passare il mio tempo ad imparare Perl. Sto lavorando con Beginning Perl (http://www.perl.org/books/beginning-perl/) e sto finendo gli esercizi alla fine del terzo capitolo.Sto cercando qualche chiarimento sul chomp
Uno degli esercizi ha chiesto di "Memorizzare i numeri di telefono importanti in un hash." Scrivere un programma per cercare i numeri in base al nome della persona. "
In ogni caso, mi ero messo a punto questo:
#!/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";
E semplicemente non avrebbe funzionato. Ho continuato a ottenere questo messaggio di errore: (.)
L'utilizzo di valore non inizializzato in concatenazione o stringa in hello.plx linea 17, la linea 1
Ho provato a giocare con il codice un po 'di più, ma ogni "soluzione" sembrava più complessa della "soluzione" che veniva prima. Alla fine, ho deciso di verificare le risposte.
L'unica differenza tra il mio codice e la risposta era la presenza di chomp ($input);
dopo <STDIN>;
.
Ora, l'autore ha utilizzato chomp
nell'esempio precedente, ma in realtà non ha spiegato cosa stava facendo chomp
. Così, ho trovato questa risposta su www.perlmeme.org:
La funzione
chomp()
rimuoverà (di solito) qualsiasi carattere di nuova riga dal alla fine di una stringa. Il motivo per cui si dice di solito è che in realtà rimuove qualsiasi carattere che corrisponde al valore attuale dei$/
(il separatore di record in ingresso ), e$/
default ad una nuova riga ..
In ogni caso, le mie domande sono :
Quali newline vengono rimossi? Perl aggiunge automaticamente
"\n"
all'input da<STDIN>
? Sono solo un po 'poco chiaro perché quando leggo "rimuove effettivamente qualsiasi carattere che corrisponda al valore corrente di$/
", non posso fare a meno di pensare "Non ricordo di aver inserito un codice$/
in nessuna parte del mio codice."Mi piacerebbe sviluppare le migliori pratiche il prima possibile: è sempre meglio includere
chomp
dopo il<STDIN>
o ci sono scenari in cui non è necessario?
'perldoc -f chomp' o [perlfunc] (http://perldoc.perl.org/perlfunc.html) –
Okay, quindi la voce chomp FAQ di Perlmeme (http: //www.perlmeme.org/faqs/manipulating_text/chomp.html) risponde alla maggior parte della mia prima domanda. Cioè, le FAQ mi portano a credere che Perl faccia automaticamente una nuova riga (non necessariamente in "\ n" ma una nuova riga sempre uguale). Ma lo capisco correttamente? – krebshack
Continuando con il collegamento da perlfunc: [chomp] (http://perldoc.perl.org/functions/chomp.html) che copre l'uso del separatore. –