#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @lines; while () { my %line; ++$line{$_} for split /\s+/; push @lines, { %line }; } print Dumper \@lines; __DATA__ one two three three one two one one three #### $VAR1 = [ { 'three' => 1, 'one' => 1, 'two' => 1 }, { 'three' => 1, 'one' => 1, 'two' => 1 }, { 'three' => 1, 'one' => 2 } ];