Perl 已关闭文件句柄上的readline()

Perl 已关闭文件句柄上的readline(),perl,Perl,运行此代码会产生一个错误,声明“第14行关闭的filehandle SEQFILE上的readline()”。以前的搜索都对如何在打开后放置某种类型的条件进行了注释。这样做只会杀死程序(我把它漏掉了,这样我就可以知道为什么它没有打开)。我想更深层次的问题是为什么它不打开我的文件 #!/usr/bin/perl -w #Ask user to point to file location and collect from the keyboard print "Please specify th

运行此代码会产生一个错误,声明“第14行关闭的filehandle SEQFILE上的readline()”。以前的搜索都对如何在打开后放置某种类型的条件进行了注释。这样做只会杀死程序(我把它漏掉了,这样我就可以知道为什么它没有打开)。我想更深层次的问题是为什么它不打开我的文件

#!/usr/bin/perl -w

#Ask user to point to file location and collect from the keyboard
print "Please specify the file location: \n";
$seq = <STDIN>;

#Remove the newline from the filename
chomp $seq;

#open the file or exit
open (SEQFILE, $seq);

#read the dna sequence from the file and store it into the array variable @seq1
@seq1 = <SEQFILE>;

#Close the file
close SEQFILE;

#Put the sequence into a single string as it is easier to search for the motif
$seq1 = join( '', @seq1);

#Remove whitespace
$seq1 =~s/\s//g;

#Use regex to say "Find 3 nucelotides and match at least 6 times
my $regex = qr/( ([ACGT]{3}) \2{6,} )/x;
$seq1 =~ $regex;
printf "MATCHED %s exactly %d times\n", $2, length($1)/3;
exit;
#/usr/bin/perl-w
#要求用户指向文件位置并从键盘收集
打印“请指定文件位置:\n”;
$seq=;
#从文件名中删除换行符
chomp$seq;
#打开文件或退出
打开(SEQFILE,$seq);
#从文件中读取dna序列并将其存储到数组变量@seq1中
@seq1=;
#关闭文件
关闭SEQFILE;
#将序列放在一个字符串中,因为更容易搜索主题
$seq1=连接(“”,@seq1);
#删除空白
$seq1=~s/\s//g;
#使用正则表达式说“找到3个nucelotides并匹配至少6次
my$regex=qr/([ACGT]{3})\2{6,})/x;
$seq1=~$regex;
printf“精确匹配%s%d次\n”,$2,长度($1)/3;
出口

要查看
open
失败的原因,请更改此选项:

open (SEQFILE, $seq);
为此:

open (SEQFILE, $seq) or die "Can't open '$seq': $!";

(请参阅。)

运行程序的位置与“要打开的文件”的存储位置不匹配

这就是我找到它的地方,

还要注意,如果您在这样的行中使用| |而不是“或”:

打开SEQFILE,$seq | | die“无法打开“$seq”:$!“

这将无法正常工作。请参阅链接:


三个参数open更好:)它说“没有这样的文件,第11行,第1行“但我知道档案在那儿@Citizin:它打印的
$seq
的值是什么?无法打开“/home/saint_tithe/Desktop/Perl Scripts/TRITESTFILE.txt”:在/home/saint_tithe/Desktop/Perl Scripts/Trinucleo1.0第11行第1行没有这样的文件或目录。你真的应该重命名你的目录,这样它就不会以空格结尾了-1、对不起。你误解了你链接到的博客文章<代码>打开(SEQFILE,$seq)| die“无法打开“$seq”:$!”实际上工作正常,因为当函数名后的第一个标记(在本例中为
打开
)是
)时,Perl将
解释为引入参数列表。(顺便说一句,这并不总是您想要的——它意味着
打印(3+4)/2
等同于
(打印7)/2
而不是
打印3.5
。因此,如果启用警告,如果函数名和
之间有空格(
),Perl将向您发出警告