http://www.perlmonks.org?node_id=1205977


in reply to Performance penalty of using qr//

The problem is actually to do with (potential) captures. Currently, capture information (the information that is used to create the values of $1 et al when accessed) is stored as part of the regex object. This model doesn't work well when the same regex can be used in multiple places. This code:
$r = qr/(.)/; "a" =~ $r; print "$1\n"; { "b" =~ $r; print "$1\n"; } print "$1\n";
outputs:
a b a
Thus a single regex object has to be associated with multiple capture sets, which change as scopes are exited.

The current workaround for this is to duplicate the qr// object each time it's executed, which is sub-optimal. Unfortunately fixing this properly is non-trivial.

Dave.