次のような Perl の質問があります。与えられた入力から一連の姓と電話番号を読み取る Perl プログラムを作成してください。名前と番号はコンマで区切る必要があります。次に、姓に従ってアルファベット順に名前と番号を出力します。ハッシュを使用します。
これを解決する方法はありますか?
次のような Perl の質問があります。与えられた入力から一連の姓と電話番号を読み取る Perl プログラムを作成してください。名前と番号はコンマで区切る必要があります。次に、姓に従ってアルファベット順に名前と番号を出力します。ハッシュを使用します。
これを解決する方法はありますか?
それを行うには複数の方法があります:)
my %phonebook;
while(<>) {
chomp;
my ($name, $phone) = split /,/;
$phonebook{$name} = $phone;
}
print "$_ => $phonebook{$_}\n" for sort keys %phonebook;
カンマで分割すると仮定すると (通常はText::CSVを使用する必要があります)、マップ関数とひし形演算子 ( )を単純に適用して、実際にこのハッシュを作成できます<>
。
#!/usr/bin/env perl
use strict;
use warnings;
my %phonebook = map { chomp; split /,/ } <>;
use Data::Dumper;
print Dumper \%phonebook;
最後の 2 行は結果を視覚化するためのもので、上の 3 行はすべてのスクリプトに含める必要があります。仕事の本質はすべて1行で行われます。
このようなタスクは、perl のコマンド ライン スイッチの強みです。詳細については、 perldoc perlrunを参照してください。
コマンドライン入力
$ perl -naF',\s*' -lE'$d{$F[0]}=$F[1];END{say"$_: $d{$_}"for sort keys%d}'
Moe, 12345
Pi, 31416
Homer, 54321
出力
Homer: 54321
Moe: 12345
Pi: 31416
おそらく次のようなもの。
my %hash;
foreach(<>){ #reads yor args from commandline or input-file
my @arr = split(/\,/); #split at comma, every line
$hash{$arr[0]} = $arr[1]; #assign to hash
}
#print hash here
foreach my $key (sort keys %hash ) #sort and iterate
{
print "Name: " . $key . " Number: " . $hash{$key} . "\n";
}