The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
use base 'LEOCHARRE::CLI';
use strict;
use Cwd;
my $o = gopts();


sub slurp {
   my $abs = shift;
   local $/;
   open(FI,'<',$abs) or die;
   my$t = <FI>;
   close FI;
   return $t;
}

my %blocks;

my $d = $ARGV[0] || cwd(); # TODO line is here
debug($d);

my @f = split( /\n/, `find '$d' -type f`);

FILE: for my $abs ( @f ){
   my $line_num = 0;
   open(FI,'<',$abs) or warn("cant open for reading $abs, $!") and next FILE;

   debug($abs);

   my $block_num = 0;
   my $block_is_open = 0; # TODO another line but this one continues in the next line
   # which is this one

   while( my $line = <FI> ){

      if( $line=~/#\s*(TODO.+)/ ){
         $block_num++;
         $blocks{$abs}{$block_num}{content}.=$1;
         $blocks{$abs}{$block_num}{linenum} = $line_num;
         $block_is_open =1;
      }
      elsif( $line=~/^\s*#(.+)/ ){
         if ($block_is_open){
            $blocks{$abs}{$block_num}{content}.=$1;
         }
      }
      else{
         $block_is_open = 0;
      }

      $line_num++;
   }

}


for my $abs ( sort keys %blocks ){
   print "==========================\n# $abs\n\n";
   
   for my $blocknum ( sort keys %{$blocks{$abs}} ){
      my $content = $blocks{$abs}{$blocknum}{content};
      my $linenum   = $blocks{$abs}{$blocknum}{linenum};

      print "# block $blocknum, line $linenum :\n\n";
      print "$content\n\n";

   }
}







__END__
#!/bin/sh



find $1 -type f | xargs grep '# TODO';


#split( /\n/, `find '$PATH' -type f | xargs grep '# TODO'` );