#! /usr/local/bin/perl # # Generate all substrings. # Number of substrings = n * (n + 1) / 2 # # % echo abcd | perl all-substrs # a # ab # abc # abcd # b # bc # bcd # c # cd # d require 5.004; $text = join "", <>; chomp $text; for $suffix (gen_suffixes($text)) { for $prefix (gen_prefixes($suffix)) { print $prefix, "\n"; } } sub gen_suffixes() { my ($text) = @_; my @suffixes = (); do { push @suffixes, $text; } while ($text =~ s/^.(.)/$1/); return @suffixes; # arrange in long order. } sub gen_prefixes() { my ($text) = @_; my @prefixes = (); do { push @prefixes, $text; } while ($text =~ s/(.).$/$1/); return reverse @prefixes; # arrange in short order. }