Perl 从输入读取并在哈希中存储逗号分隔的值

Perl 从输入读取并在哈希中存储逗号分隔的值,perl,Perl,我有这样一个Perl问题: 编写一个Perl程序,从给定的输入中读取一系列姓氏和电话号码。名称和数字应以逗号分隔。然后根据姓氏按字母顺序打印姓名和数字。使用哈希 你知道怎么解决这个问题吗?可能是下面这样的问题 my %hash; foreach(<>){ #reads yor args from commandline or input-file my @arr = split(/\,/); #split at comma, every line $hash{$arr[0]} = $

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


你知道怎么解决这个问题吗?

可能是下面这样的问题

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";
}
my%hash;
foreach(){#从命令行或输入文件读取您的参数
my@arr=split(/\,/);#在逗号处拆分,每行
$hash{$arr[0]}=$arr[1];#分配给hash
}
#在这里打印哈希
foreach my$key(排序键%hash)#排序并迭代
{
打印“名称:“.$key.”编号:“.$hash{$key}.\n”;
}

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

my%电话簿;
while(){
咀嚼;
我的($name,$phone)=拆分/,/;
$phonebook{$name}=$phone;
}
为排序键%phonebook;打印“$\=>$phonebook{$\}\n”;

像这样的任务是perl命令行开关的优势所在。有关更多信息,请参阅

命令行输入

$ 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
输出

$ 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

假设我们使用逗号分割(您通常应该使用逗号),我们实际上可以使用函数和菱形运算符()的简单应用程序创建此哈希

#/usr/bin/env perl
严格使用;
使用警告;
我的%phonebook=map{chomp;split/,/};
使用数据::转储程序;
打印转储程序\%电话簿;

最后两行只是为了可视化结果,上面三行应该出现在所有脚本中。这项工作的全部内容都在一行中完成。

让我们看看您的努力。不要用逗号分隔,CSV并不是那么简单,请使用Text::CSV。