The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use Carp;

use constant USE_IO_STRING => $] <= 5.008;


sub ro_fh {
    my @handles = ();
    my $i = 1;

    for my $stringref (@_) {
        croak "error: argument $i is not a scalarref"
            unless ref $stringref eq "SCALAR";

        my $fh = undef;

        if (USE_IO_STRING) {
            require IO::String;
            $fh = IO::String->new($stringref);
        }
        else {
            open($fh, "<", $stringref)
                or croak "fatal: Can't read in-memory buffer: $!";
        }

        $i++;
        push @handles, $fh;
    }

    return @handles
}


sub wo_fh {
    my @handles = ();
    my $i = 1;

    for my $stringref (@_) {
        croak "error: argument $i is not a scalarref"
            unless ref $stringref eq "SCALAR";

        my $fh = undef;

        if (USE_IO_STRING) {
            require IO::String;
            $fh = IO::String->new($stringref);
        }
        else {
            open($fh, ">", $stringref)
                or croak "fatal: Can't read in-memory buffer: $!";
        }

        $i++;
        push @handles, $fh;
    }

    return @handles
}


1