Text :: xSV на самом деле, на мой взгляд, гораздо более приятный интерфейс, чем Text :: CSV [_XS], и вы можете рассмотреть возможность его использования.
Базовыйвызов так же прост, как
my $csv = Text::xSV->new(filename => "file.csv");
или даже
my $csv = Text::xSV->new;
, который будет читать из файлов, названных в командной строке (если они есть), или считывать из стандартного ввода, изапись в стандартный вывод.
Оттуда работать с данными так же просто, как
while (my @row = $csv->get_row) {
# Do stuff with the fields in @row
}
или, если первое, что вы делаете, это
$csv->read_header;
затем он прочитает первую строку файла в виде списка имен полей, а затем вы сможете получить доступ к своим данным следующим образом:
while (my %row = $csv->fetchrow_hash) {
print $row{EmployeeName};
}
, что избавляет вас от необходимости считать порядок столбцов и ссылаться на них.им по номеру.Конечно, есть и функции для вывода, и они такие же простые - все это в документации.Если вы одновременно читаете и пишете, вы создаете два разных объекта Text::xSV
, один для ввода и один для вывода.
Полностью обработанный эквивалент фильтра «прописные буквы всего» в другом ответе:
#!/usr/bin/perl
use strict;
use warnings;
use Text::xSV;
my $in = Text::xSV->new("data.csv");
my $out = Text::xSV->new("output.csv");
while (my $row = $in->get_row) {
for my $col (@row) {
$col = uc $col;
}
$out->print_row(@row);
}
Так как это всего лишь служебный скрипт, мы позволяем Text::xSV
просто вызвать для нас исключение, если есть какие-либо проблемы с открытием файла, что (в отличие от open
) это сделает.