Is \G intended to be meaningful in an argument to split? Instrumenting two variations tells me that \G and pos() do not work within split//: dcollins@nightshade64:~/toolchain/perl/t$ ./perl -Dr -le 'print join("*", split(/(?{print "POS: " . pos() . "\n";})\G(.)/, "banana"))' Compiling REx "(?{print %"POS: %" . pos() . %"\n%";})\G(.)" Final program: 1: EVAL (4) 4: GPOS (5) 5: OPEN1 (7) 7: REG_ANY (8) 8: CLOSE1 (10) 10: END (0) anchored(GPOS) GPOS:0 minlen 1 with eval Enabling $` $& $' support (0x7). EXECUTING... Matching REx "(?{print %"POS: %" . pos() . %"\n%";})\G(.)" against "banana" 0 <> <banana> | 0| 1:EVAL(4) POS: 0 0 <> <banana> | 0| 4:GPOS(5) 0 <> <banana> | 0| 5:OPEN1(7) 0 <> <banana> | 0| 7:REG_ANY(8) 1 <b> <anana> | 0| 8:CLOSE1(10) 1 <b> <anana> | 0| 10:END(0) Match successful! Matching REx "(?{print %"POS: %" . pos() . %"\n%";})\G(.)" against "anana" 0 <> <banana> | 0| 1:EVAL(4) POS: 0 0 <> <banana> | 0| 4:GPOS(5) 0 <> <banana> | 0| 5:OPEN1(7) 0 <> <banana> | 0| 7:REG_ANY(8) 1 <b> <anana> | 0| 8:CLOSE1(10) 1 <b> <anana> | 0| 10:END(0) Match possible, but length=1 is smaller than requested=2, failing! Match failed *b*anana dcollins@nightshade64:~/toolchain/perl/t$ ./perl -Dr -le 'while ("banana" =~ /(?{print "POS: " . pos() . "\n";})\G(.)/g) {print "$&\n";}' Compiling REx "(?{print %"POS: %" . pos() . %"\n%";})\G(.)" Final program: 1: EVAL (4) 4: GPOS (5) 5: OPEN1 (7) 7: REG_ANY (8) 8: CLOSE1 (10) 10: END (0) anchored(GPOS) GPOS:0 minlen 1 with eval Enabling $` $& $' support (0x7). EXECUTING... Matching REx "(?{print %"POS: %" . pos() . %"\n%";})\G(.)" against "banana" 0 <> <banana> | 0| 1:EVAL(4) POS: 0 0 <> <banana> | 0| 4:GPOS(5) 0 <> <banana> | 0| 5:OPEN1(7) 0 <> <banana> | 0| 7:REG_ANY(8) 1 <b> <anana> | 0| 8:CLOSE1(10) 1 <b> <anana> | 0| 10:END(0) Match successful! b Matching REx "(?{print %"POS: %" . pos() . %"\n%";})\G(.)" against "anana" 1 <b> <anana> | 0| 1:EVAL(4) POS: 1 1 <b> <anana> | 0| 4:GPOS(5) 1 <b> <anana> | 0| 5:OPEN1(7) 1 <b> <anana> | 0| 7:REG_ANY(8) 2 <ba> <nana> | 0| 8:CLOSE1(10) 2 <ba> <nana> | 0| 10:END(0) Match successful! a Matching REx "(?{print %"POS: %" . pos() . %"\n%";})\G(.)" against "nana" 2 <ba> <nana> | 0| 1:EVAL(4) POS: 2 2 <ba> <nana> | 0| 4:GPOS(5) 2 <ba> <nana> | 0| 5:OPEN1(7) 2 <ba> <nana> | 0| 7:REG_ANY(8) 3 <ban> <ana> | 0| 8:CLOSE1(10) 3 <ban> <ana> | 0| 10:END(0) Match successful! n Matching REx "(?{print %"POS: %" . pos() . %"\n%";})\G(.)" against "ana" 3 <ban> <ana> | 0| 1:EVAL(4) POS: 3 3 <ban> <ana> | 0| 4:GPOS(5) 3 <ban> <ana> | 0| 5:OPEN1(7) 3 <ban> <ana> | 0| 7:REG_ANY(8) 4 <bana> <na> | 0| 8:CLOSE1(10) 4 <bana> <na> | 0| 10:END(0) Match successful! a Matching REx "(?{print %"POS: %" . pos() . %"\n%";})\G(.)" against "na" 4 <bana> <na> | 0| 1:EVAL(4) POS: 4 4 <bana> <na> | 0| 4:GPOS(5) 4 <bana> <na> | 0| 5:OPEN1(7) 4 <bana> <na> | 0| 7:REG_ANY(8) 5 <banan> <a> | 0| 8:CLOSE1(10) 5 <banan> <a> | 0| 10:END(0) Match successful! n Matching REx "(?{print %"POS: %" . pos() . %"\n%";})\G(.)" against "a" 5 <banan> <a> | 0| 1:EVAL(4) POS: 5 5 <banan> <a> | 0| 4:GPOS(5) 5 <banan> <a> | 0| 5:OPEN1(7) 5 <banan> <a> | 0| 7:REG_ANY(8) 6 <banana> <> | 0| 8:CLOSE1(10) 6 <banana> <> | 0| 10:END(0) Match successful! a Matching REx "(?{print %"POS: %" . pos() . %"\n%";})\G(.)" against "" Regex match can't succeed, so not even tried Is this /supposed/ to work? is pos() or \G in any way a feature that is useful in split//? --- via perlbug: queue: perl5 status: open https://rt.perl.org/Ticket/Display.html?id=5004