This array holds the offsets of the beginnings of the last successful match and any capture buffers it contains. (See "Scoping Rules of Regex Variables").
The number of elements it contains will be one more than the number of the highest capture buffers (also called a subgroup) that actually matched something. (As opposed to @+
which may have more elements.)
$-[0]
is the offset of the start of the last successful match. $-[n]
is the offset of the start of the substring matched by n-th subpattern, or undef if the subpattern did not match.
Thus, after a match against $_
, $&
coincides with substr $_, $-[0], $+[0] - $-[0]
. Similarly, $n
coincides with substr $_, $-[n], $+[n] - $-[n]
if $-[n]
is defined, and $+
coincides with substr $_, $-[$#-], $+[$#-] - $-[$#-]
. One can use $#-
to find the last matched subgroup in the last successful match. Contrast with $#+
, the number of subgroups in the regular expression.
$-[0]
is the offset into the string of the beginning of the entire match. The nth element of this array holds the offset of the nth submatch, so $-[1]
is the offset where $1
begins, $-[2]
the offset where $2
begins, and so on.
After a match against some variable $var
:
$`
is the same as substr($var, 0, $-[0])
$&
is the same as substr($var, $-[0], $+[0] - $-[0])
$'
is the same as substr($var, $+[0])
$1
is the same as substr($var, $-[1], $+[1] - $-[1])
$2
is the same as substr($var, $-[2], $+[2] - $-[2])
$3
is the same as substr($var, $-[3], $+[3] - $-[3])
This variable is read-only, and its value is dynamically scoped.
This variable was added in Perl v5.6.0.