@array[$start..$end] #### #! /usr/bin/perl use strict; use warnings; use Data::Dumper; $Data::Dumper::Indent = 2; my $abstract = q{ Perl is a high-level, general-purpose, interpreted, dynamic programming language. }; my @words = split(q{ }, $abstract); my %phrase_table; my $count = $#words; for my $phrase_length (2..4){ for my $i (0..$count-$phrase_length+1){ push @{$phrase_table{$phrase_length}}, [ @words[$i..$i+$phrase_length-1] ]; } } print Dumper \%phrase_table; #### $VAR1 = { '4' => [ [ 'Perl', 'is', 'a', 'high-level,' ], [ 'is', 'a', 'high-level,', 'general-purpose,' ], [ 'a', 'high-level,', 'general-purpose,', 'interpreted,' ], [ 'high-level,', 'general-purpose,', 'interpreted,', 'dynamic' ], [ 'general-purpose,', 'interpreted,', 'dynamic', 'programming' ], [ 'interpreted,', 'dynamic', 'programming', 'language.' ] ], '3' => [ [ 'Perl', 'is', 'a' ], [ 'is', 'a', 'high-level,' ], [ 'a', 'high-level,', 'general-purpose,' ], [ 'high-level,', 'general-purpose,', 'interpreted,' ], [ 'general-purpose,', 'interpreted,', 'dynamic' ], [ 'interpreted,', 'dynamic', 'programming' ], [ 'dynamic', 'programming', 'language.' ] ], '2' => [ [ 'Perl', 'is' ], [ 'is', 'a' ], [ 'a', 'high-level,' ], [ 'high-level,', 'general-purpose,' ], [ 'general-purpose,', 'interpreted,' ], [ 'interpreted,', 'dynamic' ], [ 'dynamic', 'programming' ], [ 'programming', 'language.' ] ] };