in reply to more elegant way to parse this?

How about an alternation in the look-ahead? I also made the capture non-greedy.

johngg@shiraz:~/perl/Monks > perl -Mstrict -Mwarnings -E ' open my $cmdFH, q{<}, \ <<EOD or die $!; BSS <blah blah> SSID: <ssid> <blah blah> BSS <blah blah> SSID: <ssid2> <blah blah> BSS <blah blah> SSID: <ssid3> <blah blah> EOD my $out = do { local $/; <$cmdFH>; }; my @ssids = $out =~ m{SSID: (.*?)(?=(?:^BSS|\z))}smg; say qq{--<$_>--} for @ssids;' --<<ssid> <blah blah> >-- --<<ssid2> <blah blah> >-- --<<ssid3> <blah blah> >--

I hope this helps.

Cheers,

JohnGG