Alvis-Convert

 view release on metacpan or  search on metacpan

lib/Alvis/Utils.pm  view on Meta::CPAN

package Alvis::Utils;

require Exporter;
use strict;
use open ':utf8';
use File::Find;
use Cwd 'abs_path';
use Carp;

our @ISA = qw(Exporter);

#our @EXPORT    = qw(open_file get_files);
our @EXPORT_OK = qw( open_file get_files absolutize_path );
our $VERSION   = 0.01;

#############################################################################
# Opens file and returns its filehandle.
#
# open_file('my_file');
# open_file('file' =>'my_file', 'die' => '0', 'msg' => 'message');
#
# Returns undef if file openning fails and 'die' => '0'
#
sub open_file
{
    my %param = ('die' => 1);

    if (!defined($_[1])) {
        $param{'file'} = shift;
    } else {
        my %x = @_;
        %param = map {$_ => $x{$_}} keys %x;
    }

    my $filename = $param{'file'};
    croak "Filename to open is not defined" if (!defined($param{'file'}));

    $param{'msg'} = "Cannot open file '$filename'"
      if (!defined($param{'msg'}));

    my $is_failed = 0;
    local *FH;

    if ($filename =~ /\.bz2$/) {
        open(FH, "bzcat $filename |")
          or _open_file_failed(\$is_failed, %param);
    } elsif ($filename =~ /\.gz$/) {
        open(FH, "zcat $filename |")
          or _open_file_failed(\$is_failed, %param);
    } else {
        open(FH, $filename) or _open_file_failed(\$is_failed, %param);
    }

    return ($is_failed ? undef: *FH);
}

############################################################################
sub _open_file_failed
{
    my $is_failed = shift;
    my %param     = @_;
    croak "$param{'msg'}: $!" if ($param{'die'});
    $$is_failed = 1;
}



( run in 1.132 second using v1.01-cache-2.11-cpan-140bd7fdf52 )