#!/usr/bin/env perl use strict; use warnings; use Data::Dump; my @positions = qw/QB RB WR WR WR TE FLEX DST/; my $str = 'QB Carson Palmer RB Chris Ivory RB Eddie Lacy WR A.J. Green WR John Brown WR Davante Adams TE Martellus Bennett FLEX Jeremy Hill DST Panthers'; my $ds; my $currentPosition; for my $word (split /\s+/,$str) { if (my ($position) = grep { $word eq $_ } @positions) { $currentPosition = $position; push @{$ds->{$currentPosition}}, []; } else { push @{$ds->{$currentPosition}[-1]}, $word; } } dd $ds; { DST => [["Panthers"]], FLEX => [["Jeremy", "Hill"]], QB => [["Carson", "Palmer"]], RB => [["Chris", "Ivory"], ["Eddie", "Lacy"]], TE => [["Martellus", "Bennett"]], WR => [["A.J.", "Green"], ["John", "Brown"], ["Davante", "Adams"]], }