我已经查看了几个链接和其他问题以尝试找到解决方案,但我仍然无法打开我尝试打开的文件。这是我无法运行的代码块:
$filename = "Related Traits: Chromosome 1";
open ($output1, ">", "gwasfiles4/$filename".".txt");
$length1 = scalar(@chr1);
if ($length1 > 1) {
@chr1 = sort {$a <=> $b} @chr1;
for ($x = 0; $x <= $length1; $x++){
for ($y = $x + 1; $y <= $length1 - 1; $y++){
if (abs($chr1[$x] - $chr1[$y]) < 500000){
print $output1 "$chr1[$x]\t$chr1[$y]\n";
}
}
}
}
当我运行时,我收到错误:
print() on closed filehandle $output at file.pl line 94
为什么文件没有打开?
该文件现在打开,但是为空:
my @chr1;
my $filename = "Related_Traits_Chromosome_1_$ARGV[0]";
open (my $output1, '>', "gwasfiles4/$filename") or die $!;
my $length1 = scalar(@chr1);
if ($length1 > 1) {
@chr1 = sort {$a <=> $b} @chr1;
for (my $x = 0; $x <= $length1; $x++){
for (my $y = $x + 1; $y <= $length1 - 1; $y++){
if (abs($chr1[$x] - $chr1[$y]) < 500000){
print $output1 "$chr1[$x]\t$chr1[$y]\n";
}
}
}
}
答案 0 :(得分:3)
use strict;
和use warnings;
应始终位于您的计划的开头。修复它们首先生成的错误,您将获得更好的代码。
同样 - 您应该检查open
的错误代码:
open my $output1, '>', "gwasfiles4/$filename.txt" or die $!;
这将打印open
失败时生成的错误。我猜测gwasfiles4
不存在,或者您的操作系统不喜欢带有嵌入式:
的文件名。
如果strict
和warnings
没有足够的帮助,use diagnostics;
将为您提供有关该问题的另一层信息。
autodie
特别有用 - 它会在每个or die $!
语句后自动放置open
行。 (以及其他一些事情)。
我建议作为一种风格点 - 在打印时将你的词法文件句柄包含在{}
中,因为这使得它非常清楚它是一个文件句柄。
print {$output1} "$chr1[$x]\t$chr1[$y]\n";
编辑:
根据您的更改,您遇到了完全不同的问题:
my @chr1; #create empty array
my $length1 = scalar(@chr1); # scalar here takes length, array is empty, therefore length is _always_ zero.
if ($length1 > 1) { #therefore never happens
答案 1 :(得分:0)
我建议目录gwasfiles4
不存在或者在Windows系统上工作,该系统不允许在其文件名中使用冒号: