my ($nickname, $last_fingerprint) = $line =~ / \A # anchor at start \# # literal number sign \w{3} # month \s \d\d # day \s \d\d:\d\d:\d\d\.\d{3} # timestamp \s \[\w+\] # log level between brackets \s .*? # log msg \s \( # literal paren open .*? # stuff in the parens \s # space preceding the nickname (\w+) # capture the nickname \) # literal paren close : \s \$[0-9A-F]{40}\(\w+\) # literal $, 40 hex digits, paren open, word, paren close \s \$[0-9A-F]{40}\(\w+\) # again \s \$([0-9A-F]{40})\(\w+\) # capture last fingerprint \z # anchor at end /msx; # PBP