Clarification on chomp
Estou de folga das aulas agora e decidi gastar meu tempo aprendendo Perl. Estou trabalhando com Beginning Perl http: //www.perl.org/books/beginning-perl) e estou terminando os exercícios no final do capítulo trê
Um dos exercícios solicitou que eu "Armazene seus números de telefone importantes em um hash. Escreva um programa para procurar números pelo nome da pessoa"
e qualquer forma, eu tinha pensado nisso:
#!/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 simplesmente não funcionaria. Continuei recebendo esta mensagem de erro:
Uso de valor não inicializado na concatenação (.) Ou string na hello.plx linha 17, linha 1
Eu tentei brincar com o código um pouco mais, mas cada "solução" parecia mais complexa do que a "solução" que veio antes. Finalmente, decidi verificar as respostas.
A única diferença entre o meu código e a resposta foi a presença dechomp ($input);
depois de<STDIN>;
.
Agora, o autor usouchomp
no exemplo anterior, mas ele realmente não cobriu o quechomp
estava fazendo. Então, encontrei esta resposta em www.perlmeme.org
Ochomp()
função @ removerá (geralmente) qualquer caractere de nova linha do final de uma string. O motivo que costumamos dizer é que ele remove realmente qualquer caractere que corresponda ao valor atual de$/
(o separador de registros de entrada) e$/
padrão para uma nova linha ..
e qualquer forma, minhas perguntas são:
Quais novas linhas estão sendo removidas? O Perl anexa automaticamente um"\n"
para a entrada de<STDIN>
? Eu sou um pouco claro, porque quando leio "ele remove realmente qualquer caractere que corresponda ao valor atual de$/
", Não consigo deixar de pensar" não me lembro de colocar um$/
em qualquer lugar do meu código. "
Gostaria de desenvolver as melhores práticas o mais rápido possível - é melhor sempre incluirchomp
depois de<STDIN>
ou existem cenários onde é desnecessário?