0

次のような Perl の質問があります。与えられた入力から一連の姓と電話番号を読み取る Perl プログラムを作成してください。名前と番号はコンマで区切る必要があります。次に、姓に従ってアルファベット順に名前と番号を出力します。ハッシュを使用します。

これを解決する方法はありますか?

4

4 に答える 4

1

それを行うには複数の方法があります:)

my %phonebook;

while(<>) {
  chomp;
  my ($name, $phone) = split /,/;
  $phonebook{$name} = $phone;
}

print "$_ => $phonebook{$_}\n" for sort keys %phonebook;
于 2012-10-25T06:37:14.773 に答える
0

カンマで分割すると仮定すると (通常はText::CSVを使用する必要があります)、マップ関数とひし形演算子 ( )を単純に適用して、実際にこのハッシュを作成できます<>

#!/usr/bin/env perl

use strict;
use warnings;

my %phonebook = map { chomp; split /,/ } <>;
use Data::Dumper;
print Dumper \%phonebook;

最後の 2 行は結果を視覚化するためのもので、上の 3 行はすべてのスクリプトに含める必要があります。仕事の本質はすべて1行で行われます。

于 2012-10-27T02:57:12.523 に答える
0

このようなタスクは、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
于 2012-10-25T10:41:55.790 に答える
0

おそらく次のようなもの。

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";
}
于 2012-10-25T05:25:55.833 に答える