pos SCALAR
pos

返回上一次 m//g 搜索在目标变量中停止的位置的偏移量(当未指定变量时,使用 $_)。除非使用了(不再推荐的)use bytes 编译指示,否则此偏移量以字符为单位,在这种情况下,偏移量以字节为单位。请注意,0 是一个有效的匹配偏移量。 undef 表示搜索位置已重置(通常是由于匹配失败,但也可能是因为尚未对标量进行匹配)。

pos 直接访问正则表达式引擎用来存储偏移量的地址,因此对 pos 进行赋值将更改该偏移量,从而也会影响正则表达式中的 \G 零宽度断言。这两种效果都会在下次匹配时生效,因此您无法在当前匹配中使用 pos 来影响位置,例如在 (?{pos() = 5})s//pos() = 5/e 中。

设置 pos 还会重置 匹配零长度 标志,这在 "perlre 中的“重复模式匹配零长度子字符串”" 中有描述。

由于失败的 m//gc 匹配不会重置偏移量,因此在这种情况下,pos 的返回值也不会改变。请参阅 perlreperlop