Это потому, что вы используете оператор |
, поэтому сопоставление регулярному выражению прекращается, когда совпадает любой из двух шаблонов.Вместо этого вы можете использовать .*
между двумя шаблонами.Поставьте \b
перед session
, чтобы обеспечить границу слова:
perl -nE '/(?<gclid>gclid=[^&"#\s]*).*(?<session>\bsession=.*)/&&say"gclid: $+{gclid} session: $+{session}"'