my $event = {}; while( <> ) { chomp; my ( $time, $lane, $factory, $event ) = split " ", $_; $event->{ $factory } = {} if not exists $event->{ $factory }; $event->{ $factory }{ $lane } = {} if not exists $event->{ $factory }{ $lane }; $event->{ $factory }{ $lane }{ $time } = $event; }