#!/usr/bin/env perl use warnings; use strict; my $DIGITS = 6; my %fib; { use bigint; for ( my ($f,$t)=(1,1); length($f)<=$DIGITS; ($f,$t)=($t,$f+$t) ) { my $s = "$f"; $fib{$s} = [$s]; while (length $s > 1) { chop $s; push @{$fib{$f}}, $s if exists $fib{$s}; } } } #use Data::Dump; dd \%fib; print "There are ",0+keys(%fib)," fibs with up to $DIGITS digits\n"; my ($re) = map {qr/$_/} join '|', map {quotemeta} sort { length $b <=> length $a or $b cmp $a } keys %fib; print "$re\n"; while () { chomp; print "Searching '$_'\n"; while (/(?=($re))./g) { print "Found ",join(', ',@{$fib{$1}})," at ",$-[0],"\n"; } } __DATA__ 496934634523123433886451447233402467622113 690168906931029935139391829792095612517948949963798093315456