无法打开GLOB错误

时间:2014-05-03 07:43:37

标签: perl

我注意到,当你拖着&将文件拖放到OS X终端中,并且路径的任何部分都包含一个空格(例如在文件夹名称中),它将其替换为\

这会导致在我的脚本中打开文件时出错:

use strict;
use warnings;
use File::Basename;

my $in;
my $filename = $ARGV[0];
unless ($filename){
    print "\n\nPlease drag and drop a FASTA/FA or plain-text file containing your sequence into the prompt window and hit ENTER. Alternatively, manually specify the file-pathway:\n";
    $filename = <STDIN>;
    chomp $filename;
}
open($in, $filename) or die "Failed to open $in: $!";
my $DNA = read_fasta($in);
my $len = length($DNA);
print "\nFASTA/Sequence Length is: $len bp \n";

print "\nPlease enter restriction sites (degeneracy characters permitted) seperated by a single space: ";
my $sites=<STDIN>;
chomp $sites;
my @pats = split ' ', $sites;

for (@pats) {
  s/K/[GT]/g;
  s/M/[AC]/g;
  s/Y/[CT]/g;
  s/S/[CG]/g;
  s/W/[AT]/g;
  s/B/[CGT]/g;
  s/V/[ACG]/g;
  s/H/[ACT]/g;
  s/D/[AGT]/g;
  s/X/[AGCT]/g;
  s/R/[AG]/g;
  s/N/[AGCT]/g;

}

for (@pats) {
    my $m = () = $DNA =~ /$_/gi;
    print "\nTotal DNA matches to $_ are: $m \n";
}

my $DIR = dirname($filename);
my $name = basename($filename);
(my $extrem = $name) =~ s/\.[^.]+$//;
open my $out, ">$DIR/$extrem $sites.txt";


my $pat=join("|",@pats);
my @cutarr = split(/$pat/, $DNA);
for (@cutarr) {
    my $len = length($_);
    print $out "$len \n";
}

print "\nYour results are located at: $DIR/$extrem $sites.txt\n\n";

close($out);
close($in);

#Subfunction - Reading formatted FASTA/FA files
sub read_fasta {
  my ($fh) = @_;
  my $sequence;

  while (<$fh>) {
    unless (/^>/) {
      chomp;
      $sequence .= $_;
    }
  }

  return $sequence;
}

如果路径不包含空格,它将打开文件。有没有更好的方法可以打开文件以避免这种情况发生?

1 个答案:

答案 0 :(得分:0)

尝试从文件名中删除反斜杠

$filename =~ tr|\\||d;
open(my $in, $filename) or die $!;