我是一个自学成才的Perler,寻求Perl的专家的协助:的Perl:通过文件句柄循环
我不断收到一个错误说我不能在foreach
循环中使用的文件句柄,即使我”我一定会close
吧(或者undef
吧,我都试过了)。查看完整的错误在这里:http://cl.ly/image/2b2D1T403s14
的代码可以在GitHub:https://github.com/bsima/yeast-TRX
有问题的代码可以在文件“script.pl”中找到大约90行:
foreach my $species (keys %Saccharomyces) {
open(RAW,">./data/$species/$geneName/raw.csv");
print RAW "gene,dinucleotide,position,trx.score,energy.score\n";
undef RAW;
open(SMOOTH,">./data/$species/$geneName/smooth.csv");
print SMOOTH "gene,position,trx.score,energy.score\n";
undef SMOOTH;
}
非常感谢帮助!我不知道Perl如何处理文件句柄的复杂性,可能是因为我缺乏正式的培训。对我的整体代码质量的任何评论也是受欢迎的,如果有人觉得特别有用。
编辑:发现问题。 Perl不能即时生成目录,所以$species/$geneName
目录甚至从未被创建。我在foreach
循环的开头添加了一行,表示简单地mkdir("$species/$geneName");
并解决了这个问题。
快速浏览'perldoc -f undef'列出你可以使用它的东西。 Bareword文件句柄不在该列表中。接受MVP的建议并使用'close'和词法文件句柄。 – tjd