Код, как написано, печатает только одну строку, потому что вы звоните $csv->print
только один раз. Поскольку у вас, очевидно, имеется более одной строки данных, вам необходимо создать цикл, который печатает все строки. Как то так:
while (my ($name, $location, $comment) = next_record()) {
$csv->print($fh, [$name, $location, $comment]);
}
Я не могу дать вам более подробный ответ, чем этот, не увидев остальную часть вашего кода и не зная, как назначены переменные $name, $location, $comment
.
Обновление после редактирования вопроса:
У вас есть цикл с for ($tree->look_down(...))
, который в порядке и занимает место цикла while
, который я описал выше. Однако, как написано в настоящее время, вы создаете новый объект $csv
и новый файл каждый раз в цикле! Вот почему вы получаете только одну строку в выходном файле. Вам нужно взять следующие строки и поместить их перед началом цикла for
:
my $csv = Text::CSV->new();
$csv->column_names('field1', 'field2', 'field3');
open $fh, ">", "file.csv" or die "ERROR: $!";
Внутри цикла вам нужно всего лишь сделать это:
$csv->print ($fh, [$name,$location,$comment]);
Затем, после завершения цикла, вы можете сделать это:
close $fh or die "$!";