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

可能类似于以下内容。

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 回答
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

假设我们用逗号分割(通常应该使用Text::CSV),我们实际上可以通过简单的map函数和菱形运算符 ( <>) 的应用来创建这个散列。

#!/usr/bin/env perl

use strict;
use warnings;

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

最后两行只是为了可视化结果,上面三行应该在所有脚本中。工作的重点都在一条线上完成。

于 2012-10-27T02:57:12.523 回答