=over

=item pos SCALAR
X<pos> X<match, position>

=item pos

Returns the offset of where the last C<m//g> search left off for the
variable in question (L<C<$_>|perlvar/$_> is used when the variable is not
specified).  This offset is in characters unless the
(no-longer-recommended) L<C<use bytes>|bytes> pragma is in effect, in
which case the offset is in bytes.  Note that 0 is a valid match offset.
L<C<undef>|/undef EXPR> indicates
that the search position is reset (usually due to match failure, but
can also be because no match has yet been run on the scalar).

L<C<pos>|/pos SCALAR> directly accesses the location used by the regexp
engine to store the offset, so assigning to L<C<pos>|/pos SCALAR> will
change that offset, and so will also influence the C<\G> zero-width
assertion in regular expressions.  Both of these effects take place for
the next match, so you can't affect the position with
L<C<pos>|/pos SCALAR> during the current match, such as in
C<(?{pos() = 5})> or C<s//pos() = 5/e>.

Setting L<C<pos>|/pos SCALAR> also resets the I<matched with
zero-length> flag, described
under L<perlre/"Repeated Patterns Matching a Zero-length Substring">.

Because a failed C<m//gc> match doesn't reset the offset, the return
from L<C<pos>|/pos SCALAR> won't change either in this case.  See
L<perlre> and L<perlop>.

=back