Я пытаюсь напечатать первую букву столбца2 входного файла, а также другие столбцы, представляющие интерес. Я не уверен, почему следующий сценарий, адаптированный из Matching first letter of word, дает мне «предупреждение о неинициализированном значении $ columns [2]».Perl - Распечатать первую букву столбца
ввода Пример файла:
ATOM 1 CAY GLY X 1 -0.124 0.401 -0.153 1.00 2.67 PEP
ATOM 2 HY1 GLY X 1 -0.648 0.043 -1.064 1.00 0.00 PEP
ATOM 3 HY2 GLY X 1 -0.208 1.509 -0.145 1.00 0.00 PEP
Выход Пример файла:
1 C -0.124 0.401 -0.153 1.00 2.67
2 H -0.648 0.043 -1.064 1.00 0.00
3 H -0.208 1.509 -0.145 1.00 0.00
Script
open (my $input_fh, "<", $filename) or die $!;
while (my $data = <$input_fh>) {
chomp $data;
my @columns = split(/\t/, $data);
my ($firstletter) = ($columns[2] =~ m/^\d+(\w)/);
if (/CAY/../HT2/)
print $output_fh join ("\t", $columns[1], $firstletter, $columns[6], $columns[7], $columns[8]), "\n";
}
UPDATE Предупреждение произошло из-за if (/CAY/../HT2/)
заявления по какой-то причине - но поскольку входные файлы являются идентификаторами Мне не нужно это условие. Кроме того, поскольку в столбце 2 нет цифр, более целесообразно использовать регулярное выражение /^(\w)/
.
_'Использование неинициализированного значения $ columns [2] '_ является предупреждением, а не ошибкой. – serenesat
mybe у вас есть пустая строка в вашем файле? – Jens
Почему фигурные скобки в заявлении на печать? – serenesat