Perl 5 version 22.2
documentation

pos

Returns the offset of where the last m//g search left off for the
variable in question ($_
is used when the variable is not
specified). Note that 0 is a valid match offset. undef 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).

pos directly accesses the location used by the regexp engine to
store the offset, so assigning to pos will change that offset, and
so will also influence the \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 pos during the current match,
such as in (?{pos() = 5})
or s//pos() = 5/e
.