2013-05-10 2 views
0

Я использую perl для моего программирования. Я застрял в ситуации, когда есть цикл, который поступает из файла и, таким образом, разбивается на массив с именем data i.e @data. и у меня есть hash% hash для добавления элементов массива непосредственно без ссылки.Как помещать массив в хэш массивов без использования его ссылки

В этом случае для цикла while ключ $ хранит в памяти одну информацию о @data и помещает ее во все строки, вызываемые после нее. Просьба предоставить идеальные решения.

while (loop in which line by line of file is been readed) { 
    @data= split (/\|/, $line, -1); 
    %hash{$key}= \@data; 
} 
+1

, что является ключом к вашему хэша, что $ хранение ключей? – Vijay

+5

Я не понимаю ваш вопрос, но, может быть, мое предположение верно: вам нужно скопировать массив @data следующим образом: '$ hash {$ key} = [@data]' или объявить 'my @ data' в цикле, иначе все хэш-значения указывают на один и тот же массив. – Matthias

+3

В программировании нет идеальных решений – Salgar

ответ

0
#! /usr/bin/env perl 
use common::sense; 
use YAML 'Dump'; 

my %results; 

sub bad { 
    my @data; 
    while (<DATA>) { 
    chomp; 
    @data = split /\|/, $_, 2; 
    $results{bad}{$data[0]} = \@data; 
    } 
} 

sub good { 
    while (<DATA>) { 
    chomp; 
    my @data = split /\|/, $_, 2; 
    $results{good}{$data[0]} = \@data; 
    } 
} 

sub good_also { 
    while (<DATA>) { 
    chomp; 
    /^([^|]+)/; # pretend we're getting the key some other way 
    $results{good_also}{$1} = [split /[|]/, $_, 2] 
    } 
} 

my $data_pos = tell DATA; 
bad; 
seek DATA, $data_pos, 0; good; 
seek DATA, $data_pos, 0; good_also; 

print Dump(\%results); 

say "bad purchase: ", join '|', @{$results{bad}{purchase}}; 
say "bad location: ", join '|', @{$results{bad}{location}}; 
say "bad when: ", join '|', @{$results{bad}{when}}; 

__DATA__ 
purchase|apples 
location|Fiesta 
when|today 

Выход:

--- 
bad: 
    location: &1 
    - when 
    - today 
    purchase: *1 
    when: *1 
good: 
    location: 
    - location 
    - Fiesta 
    purchase: 
    - purchase 
    - apples 
    when: 
    - when 
    - today 
good_also: 
    location: 
    - location 
    - Fiesta 
    purchase: 
    - purchase 
    - apples 
    when: 
    - when 
    - today 
bad purchase: when|today 
bad location: when|today 
bad when: when|today 
Смежные вопросы