在Hash中读取输入和存储逗号分隔值

时间:2012-10-25 05:22:42

标签: perl

我有一个像这样的Perl问题: 编写一个Perl程序,它将读取给定输入中的一系列姓氏和电话号码。名称和数字应以逗号分隔。然后根据姓氏按字母顺序打印名称和数字。使用哈希值。

知道如何解决这个问题吗?

4 个答案:

答案 0 :(得分:1)

有多种方法可以做到这一点:)

my %phonebook;

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

print "$_ => $phonebook{$_}\n" for sort keys %phonebook;

答案 1 :(得分: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";
}

答案 2 :(得分: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

答案 3 :(得分:0)

假设我们在逗号上拆分(通常应该使用Text::CSV),我们实际上可以通过map函数和菱形运算符(<>)的简单应用来创建此哈希

#!/usr/bin/env perl

use strict;
use warnings;

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

最后两行只是为了显示结果,而上三行应该在所有脚本中。这项工作的所有内容都在一行中完成。