package Brackup::Util;
use strict;
use warnings;
require Exporter;

use vars qw(@ISA @EXPORT_OK);
@ISA = ('Exporter');
@EXPORT_OK = qw(tempfile tempdir slurp valid_params);

my $mainpid = $$;
my @TEMP_FILES = ();  # ([filename, caller], ...)

END {
    # will happen after File::Temp's cleanup
    if ($$ == $mainpid) {
        foreach my $rec (@TEMP_FILES) {
            next unless -e $rec->[0];
            unlink($rec->[0]);
        }
    }
}
use File::Temp ();

sub tempfile {
    my (@ret) = File::Temp::tempfile();
    my $from = join(" ", (caller())[0..2]);
    push @TEMP_FILES, [$ret[1], $from];
    return wantarray ? @ret : $ret[0];
}

sub tempdir {
    return File::Temp::tempdir(@_);
}

sub slurp {
    my $file = shift;
    open(my $fh, $file) or die "Failed to open $file: $!\n";
    return do { local $/; <$fh>; }
}

sub valid_params {
    my ($vlist, %uarg) = @_;
    my %ret;
    $ret{$_} = delete $uarg{$_} foreach @$vlist;
    croak("Bogus options: " . join(', ', sort keys %uarg)) if %uarg;
    return %ret;
}

1;


syntax highlighted by Code2HTML, v. 0.9.1