Что означает $ variable {$ 2} ++ в Perl? - PullRequest
1 голос
/ 16 января 2020

У меня есть набор данных из двух столбцов в текстовом файле с разделителями табуляции, и скрипт perl читает его как FH, и это следующий фрагмент кода:

while(<FH>)
{
    chomp;
    s/\r//;
    /(.+)\t(.+)/;
    $uniq_tar{$2}++;
    $uniq_mir{$1}++;
    push@{$mir_arr{$1}},$2;
    push @{$target{$2}} ,$1;
}

Когда я пытаюсь напечатать любую из 4 вышеуказанных переменных, он говорит, что переменные неинициализированы. И, когда я пытался напечатать $uniq_tar{$2}++; и $uniq_mir{$1}++;, он просто печатает некоторые числа, которые я не могу понять.

Я просто хотел бы знать, что эта часть кода оценивает в целом? $uniq_tar{$2}++;

1 Ответ

3 голосов
/ 06 февраля 2020

while l oop помещает каждую строку вашего файла, в свою очередь, в специальную переменную Perl $_.

/.../ является оператором сопоставления. По умолчанию он работает на $_.

/(.*)\t(.*)/ - это регулярное выражение внутри оператора совпадения. Если регулярное выражение соответствует тому, что находится в $_, то биты совпадающей строки, которые находятся внутри двух пар скобок, сохраняются в специальных переменных Perl $1 и $2.

У вас есть хэши, называемые %uniq_tar и %uniq_mir. Вы получаете доступ к отдельным элементам в ha sh, используя $hashname{key}. Таким образом, $uniq_tar{$1} находит значение в %uniq_tar, связанное с ключом, который хранится в $1 (то есть - часть вашей записи перед первой вкладкой).

$variable++ увеличивает значение число в переменной $. Так что $uniq_tar{$1}++ увеличивает значение, которое мы нашли в предыдущем абзаце.

Итак, как говорит zdim, это частотомер. Вы читаете каждую строку в файле и извлекаете биты данных до и после первой вкладки в строке. Затем вы увеличиваете значения в два хэша, чтобы подсчитать количество вхождений каждой из строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...