Я знаю, что можно легко разбить строку на хеш, используя map
, как этот вопрос Как мне разбить строку на ключи хеша со значениями undef? , или это Perl Monksнить .Итак, что-то вроде этого очень легко работает:
my %table = map { chomp; split(/\t/) } <DATA>;
dd \%table;
__DATA__
#1245 banana
#3499 cherry
#5290 notebook
#2112 compact_disc
Конечно, это приведет к:
{
"#1245" => "banana",
"#2112" => "compact_disc",
"#3499" => "cherry",
"#5290" => "notebook",
}
Если бы у кого-то была более сложная таблица данных, и он хотел бысделать хэш массивов, используя второй столбец в качестве ключа, это возможно с картой, или нужно использовать «более длинную» форму:
my %table;
while(<DATA>) {
chomp(my @elems = split(/\t/));
$table{$elems[1]} = \@elems;
}
dd \%table;
__DATA__
shelf1 #1245 banana Dole
shelf1 #3499 cherry Acme
shelf2 #5290 notebook Staples
shelf3 #2112 compact_disc Mercury_Records
, чтобы сделать:
{
"#1245" => ["shelf1", "#1245", "banana", "Dole"],
"#2112" => ["shelf3", "#2112", "compact_disc", "Mercury_Records"],
"#3499" => ["shelf1", "#3499", "cherry", "Acme"],
"#5290" => ["shelf2", "#5290", "notebook", "Staples"],
}
Я попробовал эти два подхода, но ни один из них, похоже, не работает, и я предполагаю, что это невозможно.Но просто из любопытства (и образования) было интересно, можно ли сделать это подобным образом.
my %table = map{ $_->[1] => @$_ } split(/\t/, <DATA>);
my %table = map{ split(/\t/); $_->[1], @$_ } <DATA>;