#!/usr/local/bin/perl use strict; use warnings; use Regexp::Assemble; use Math::BigFloat lib => 'GMP'; my $maxdigits = shift || 1000; my $pi = Math::BigFloat->bpi($maxdigits) . ''; $pi =~ s/3\./3/; my $re_date = do { my $ra = Regexp::Assemble->new; for my $m ( 1 .. 12 ) { my $ld = (qw/31 29 31 30 31 30 31 31 30 31 30 31/)[ $m - 1 ]; for my $d ( 1 .. $ld ) { $ra->add( sprintf "%02d%02d", $m, $d ); } } $ra->re; }; my $re_hh = do { my $ra = Regexp::Assemble->new; for my $h ( 0 .. 23 ) { $ra->add( sprintf "%02d", $h ); } $ra->re; }; my $re_mm = do { my $ra = Regexp::Assemble->new; for my $h ( 0 .. 59 ) { $ra->add( sprintf "%02d", $h ); } $ra->re; }; my $re_ss = $re_mm; my $re_piday = qr/($re_date)($re_hh)($re_mm)($re_ss)/; warn $re_piday, "\n"; while ( $pi =~ /$re_piday/g ) { print "$1 $2:$3:$4 @", pos($pi) - 10, "\n"; }