我现在正在上课休息,并决定花时间学习Perl。我正在使用Beginning Perl(http://www.perl.org/books/beginning-perl/),并且在第三章结束时我将完成练习。我正在寻找关于chomp的一些澄清
其中一个练习题要求我“将重要的电话号码存储在一个散列表中,编写一个程序来查看该人的姓名。”
无论如何,我想出了这一点:
#!/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行
使用未初始化值的串联或字符串我试图与代码玩弄一些,但每个“解决方案”看起来都比之前的“解决方案”复杂。最后,我决定检查答案。
我的代码和答案之间唯一的区别是在
<STDIN>;
之后出现chomp ($input);
。现在,笔者在前面的例子中使用了
chomp
,但他并没有真正涵盖chomp
正在做什么。所以,我发现www.perlmeme.org这样的回答:的
chomp()
功能将删除(通常)从 一个字符串的结尾任何换行符。我们通常说的原因是,它实际上 消除了换行是的$/
(输入 记录分隔符)的当前值匹配任何字符,并$/
默认..
不管怎样,我的问题是:
什么换行符被删除? Perl会自动将
"\n"
附加到来自<STDIN>
的输入吗?我只是有点不清楚,因为当我读到“它实际上删除了与当前值$/
相匹配的任何字符”时,我不禁想到“我不记得在我的代码中的任何地方放置$/
”。我想尽快开发最佳实践 - 是否最好在
<STDIN>
之后始终包含chomp
或者是否存在不必要的情况?
'的perldoc -f chomp'或[perlfunc(http://perldoc.perl.org/perlfunc.html) – 2011-09-03 00:59:35
好了,所以在Perlmeme的FAQ(HTTP的格格条目: //www.perlmeme.org/faqs/manipulating_text/chomp.html)回答了我的第一个问题。也就是说,FAQ使我相信Perl会自动换行(不一定是“\ n”,而换行符也是一样)。但我能正确理解吗? – krebshack
继续使用来自perlfunc:[chomp](http://perldoc.perl.org/functions/chomp.html)的链接,其中介绍了分隔符的使用。 – 2011-09-03 01:01:03