我現在正在上課休息,並決定花時間學習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