私は今授業を休んでいて、Perlの学習に時間を費やすことに決めました。私はBeginningPerl(http://www.perl.org/books/beginning-perl/)を使用しており、第3章の終わりで演習を終了しています。
演習の1つで、「重要な電話番号をハッシュに保存します。人の名前で番号を検索するプログラムを作成してください」と尋ねられました。
とにかく、私はこれを思いついた:
#!/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行目での連結(。)または文字列での初期化されていない値の使用
コードをもう少し試してみましたが、各「ソリューション」は、その前にある「ソリューション」よりも複雑に見えました。最後に、答えを確認することにしました。
私のコードと答えの唯一の違いは、chomp ($input);
afterの存在でした<STDIN>;
。
さて、作者はchomp
前の例で使用しましたが、彼は実際に何をしていたかをカバーしていませんでしたchomp
。だから、私はwww.perlmeme.orgでこの答えを見つけました:
この
chomp()
関数は、(通常は)文字列の末尾から改行文字を削除します。$/
通常私たちが言う理由は、 (入力レコード区切り文字)の現在の値に一致するすべての文字を実際に削除し、$/
デフォルトで改行するためです。
とにかく、私の質問は次のとおりです。
どの改行が削除されますか?Perlは
"\n"
からの入力に自動的にを追加し<STDIN>
ますか?「現在の値に一致する文字が実際に削除される」を読んだとき、「コードのどこかに$/
置いたのを覚えていない」と思わずにはいられないので、少しわかりません。$/
できるだけ早くベストプラクティスを開発したいのですが、常に
chomp
後に含めるのが最善<STDIN>
ですか、それとも不要なシナリオがありますか?