The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package App::MyPerl::Rewrite;

use Moo;
use IO::All;

with 'App::MyPerl::Role::Script';

sub use_files { qw(modules) }

has exclude_dev_preamble => (is => 'lazy', builder => sub {
  join "\n", @{$_[0]->preamble},
});

sub run {
  die "myperl-rewrite dir1 dir2 ..." unless @ARGV;
  $_[0]->rewrite_dir($_) for @ARGV;
}

sub rewrite_dir {
  my ($self, $dir) = @_;
  my $preamble = $self->exclude_dev_preamble;
  print $preamble . "\n" if $self->_env_value('DEBUG');
  foreach my $file (io->dir($dir)->all_files(0)) {
    next unless $file->name =~ /\.pm$|\.t$|^${dir}\/bin\//;
    my $data = $file->all;
    my $shebang = '';
    my $line = 1;
    if ($data =~ s/\A(#!.*\n)//) {
      $shebang = $1;
      $line = 2;
    }
    $file->print($shebang.$preamble."\n#line ${line}\n".$data);
  }
}

1;