У меня небольшие проблемы со встроенной функцией разделения Perl. Я создаю сценарий, который редактирует первую строку файла CSV, который использует канал для разделения столбцов. Ниже первая строка:
KEY|H1|H2|H3
Однако, когда я запускаю скрипт, я получаю вывод:
Col1|Col2|Col3|Col4|Col5|Col6|Col7|Col8|Col9|Col10|Col11|Col12|Col13|
У меня такое ощущение, что Perl не нравится тот факт, что я использую переменную для фактического разделения, и в этом случае переменная является конвейером. Когда я заменяю переменную реальным каналом, он работает отлично, как и предполагалось. Как можно правильно разделить строку при использовании разграничения каналов, даже при передаче переменной? Кроме того, как глупое предостережение, у меня нет прав для установки внешнего модуля из CPAN, поэтому я должен придерживаться встроенных функций и модулей.
Для контекста, вот необходимая часть моего скрипта:
our $opt_h;
our $opt_f;
our $opt_d;
# Get user input - filename and delimiter
getopts("f:d:h");
if (defined($opt_h)) {
&print_help;
exit 0;
}
if (!defined($opt_f)) {
$opt_f = &promptUser("Enter the Source file, for example /qa/data/testdata/prod.csv");
}
if (!defined($opt_d)) {
$opt_d = "\|";
}
my $delimiter = "\|";
my $temp_file = $opt_f;
my @temp_file = split(/\./, $temp_file);
$temp_file = $temp_file[0]."_add-headers.".$temp_file[1];
open(source_file, "<", $opt_f) or die "Err opening $opt_f: $!";
open(temp_file, ">", $temp_file) or die "Error opening $temp_file: $!";
my $source_header = <source_file>;
my @source_header_columns = split(/${delimiter}/, $source_header);
chomp(@source_header_columns);
for (my $i=1; $i<=scalar(@source_header_columns); $i++) {
print temp_file "Col$i";
print temp_file "$delimiter";
}
print temp_file "\n";
while (my $line = <source_file>) {
print temp_file "$line";
}
close(source_file);
close(temp_file);