Я самоучка 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
и лексические файловые дескрипторы. - person tjd   schedule 11.10.2013