The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package t::Utils;
use base qw(Exporter);

our @EXPORT = qw(write_cpanfile write_files);

sub write_cpanfile {
    write_files('cpanfile' => $_[0]);
}

sub write_files {
    my %files = @_;

    my $dir = "t/sample-" . rand(100000);
    mkdir $dir;
    chdir $dir;

    for my $file (keys %files) {
        open my $fh, ">", $file or die $!;
        print $fh $files{$file};
    }

    return Remover->new($dir, [ keys %files ]);
}

package
  Remover;
sub new {
    bless { dir => $_[1], files => $_[2] }, $_[0];
}

sub DESTROY {
    my $self = shift;
    for my $file (@{$self->{files}}) {
        unlink $file;
    }
    chdir "../..";
    rmdir $self->{dir};
}