Вы допустили одну большую ошибку и одну меньшую.
В основном вы, кажется, забыли, что <FILE>
будет читать одну строку из вашего файла.И ни одна из отдельных строк в вашем файле не будет соответствовать вашему регулярному выражению.Вы можете убедиться в этом, напечатав значение $line
внутри цикла.
Самый простой способ исправить это - использовать переменную $/
.$/
- это «входной разделитель записей» в Perl.Он содержит текстовую строку, которую Perl использует для определения конца записи при чтении из файла.Значение по умолчанию - \n
(именно поэтому <...>
читает строку за раз), но мы можем изменить ее, чтобы сделать ее более полезной.
$/ = "},\n";
Теперь, если вы напечатаете $line
, вы получите что-то гораздо более полезное.
Но код все еще не работает.Из-за небольшой ошибки в вашем регулярном выражении.
Ваше регулярное выражение выглядит следующим образом:
age:(.*)\,\s*gender: 'male'\}
Предполагается, что закрывающий }
непосредственно следует за строкой male
.Но дело не в этом - между ними новая строка.Если вы измените регулярное выражение для учета этого, то оно будет работать:
age:(.*)\,\s*gender: 'male'\s*\}
Ваш код теперь работает, но подобный синтаксический анализ довольно хрупок.Возможно, вам лучше посоветовать удалить const users =
, а затем проанализировать все остальное, используя JSON-анализатор.