#!/usr/bin/perl my@wordsInOrder; while (<>) { foreach ("$_" =~ m/\w+/g) { push @wordsInOrder, lc($_); } } my$trypHash = {}; for ($i=0;$i < scalar(@wordsInOrder)-2; $i++) { $trypHash->{$wordsInOrder[$i]." ".$wordsInOrder[$i+1]." ".$wordsInOrder[$i+2]} += 1; } my$dupeHash = {}; for ($i=0;$i < scalar(@wordsInOrder)-1; $i++) { $dupeHash->{$wordsInOrder[$i]." ".$wordsInOrder[$i+1]} += 1; } my$oneHash = {}; for ($i=0;$i < scalar(@wordsInOrder); $i++) { $oneHash->{$wordsInOrder[$i]} += 1; } foreach my$one (sort {$oneHash->{$b} <=> $oneHash->{$a}} keys %{$oneHash} ) { print "$one\n"; foreach my$two (sort {$dupeHash->{$b} <=> $dupeHash->{$a}} keys %{$dupeHash} ) { next unless $two =~ m/^$one/; print "\t$two\n"; foreach my$three (sort {$trypHash->{$b} <=> $trypHash->{$a}} keys %{$trypHash} ) { next unless $three =~ m/^$two/; print "\t\t$three\n"; } } }