Bio-Grid-Run-SGE
view release on metacpan or search on metacpan
lib/Bio/Grid/Run/SGE/Util.pm view on Meta::CPAN
for my $dir (@dirs) {
push @expanded_dirs, bsd_glob( $dir, GLOB_TILDE | GLOB_ERR );
confess 'glob error' if (GLOB_ERROR);
}
return unless (@expanded_dirs);
@expanded_dirs = map { File::Spec->rel2abs($_) } @expanded_dirs;
return wantarray ? @expanded_dirs : ( shift @expanded_dirs );
}
sub glob_list {
my $input_files = shift;
my @abs_input_files;
for my $glob_pattern (@$input_files) {
my @files = my_glob($glob_pattern);
next unless ( @files > 0 );
for my $f (@files) {
confess "Couldn't find/access $f" unless ( -f $f || -d $f );
}
push @abs_input_files, @files;
}
confess "INDEX: no input files found" unless ( @abs_input_files > 0 );
return \@abs_input_files;
}
sub my_glob {
my (@dirs) = @_;
return unless defined wantarray; # don't bother doing more
my @expanded_dirs;
for my $dir (@dirs) {
push @expanded_dirs, bsd_glob( $dir, GLOB_TILDE | GLOB_ERR );
confess 'glob error' if (GLOB_ERROR);
}
cluck "no results in glob: " . join( ", ", @dirs ) unless (@expanded_dirs);
@expanded_dirs = map { File::Spec->rel2abs($_) } @expanded_dirs;
return wantarray ? @expanded_dirs : ( shift @expanded_dirs );
}
sub expand_path {
my @expanded = expand_path_rel(@_);
@expanded = map { File::Spec->rel2abs($_) } @expanded;
return wantarray ? @expanded : ( shift @expanded );
}
sub expand_path_rel {
my @files = @_;
my @expanded;
for my $file (@files) {
confess "trying to expand empty path" unless($file);
$file =~ s{ ^ ~ ( [^/]* ) }
{ $1
? (getpwnam($1))[7]
: ( $ENV{HOME} || $ENV{LOGDIR} || (getpwuid($>))[7] )
}ex;
push @expanded, $file;
}
return wantarray ? @expanded : ( shift @expanded );
}
sub my_mkdir {
my ($path) = @_;
eval { mkpath($path) };
if ($@) {
confess "Couldn't create $path: $@";
}
}
sub delete_by_regex {
my ( $dir, $file_regex, $simulate ) = @_;
$dir = my_glob($dir);
opendir( my $dh, $dir ) || die "can't opendir >$dir< $!";
for ( readdir($dh) ) {
if (/$file_regex/) {
my $file = File::Spec->catfile( $dir, $_ );
if ($simulate) {
print STDERR $file;
} else {
unlink $file;
}
}
}
closedir $dh;
return;
}
sub concat_files {
my $c = shift;
my $dir = expand_path( $c->{result_dir} );
my $file_regex = qr/\Q$c->{job_name}\E #job name
\.j$c->{job_id} #the job id
\.[0-9]+ #the sge task id
\.c[\-0-9]+(?:\.[\w\-.#]+)? # combination idx
(?:\..*)? #suffix
$/x;
my @to_be_unlinked;
open my $concat_fh, '>', catfile( $dir, "$c->{job_name}.j$c->{job_id}.result.concat" )
or confess "Can't open filehandle: $!";
my @paths = path($dir)->children($file_regex);
for my $abs_f (@paths) {
open my $fh, '<', $abs_f or confess "Can't open filehandle for $abs_f: $!";
while ( my $line = <$fh> ) { print $concat_fh $line; }
$fh->close;
push @to_be_unlinked, $abs_f;
}
( run in 1.937 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )