Come un po 'di informazioni supplementari, unichars
da Unicode::Tussle può essere utilizzato per elencare i caratteri corrispondenti.
$ unichars -au '\p{IsPi}' | cat
« U+000AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
‘ U+02018 LEFT SINGLE QUOTATION MARK
‛ U+0201B SINGLE HIGH-REVERSED-9 QUOTATION MARK
“ U+0201C LEFT DOUBLE QUOTATION MARK
‟ U+0201F DOUBLE HIGH-REVERSED-9 QUOTATION MARK
‹ U+02039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK
⸂ U+02E02 LEFT SUBSTITUTION BRACKET
⸄ U+02E04 LEFT DOTTED SUBSTITUTION BRACKET
⸉ U+02E09 LEFT TRANSPOSITION BRACKET
⸌ U+02E0C LEFT RAISED OMISSION BRACKET
⸜ U+02E1C LEFT LOW PARAPHRASE BRACKET
⸠ U+02E20 LEFT VERTICAL BAR WITH QUILL
$ unichars -au '\p{IsPf}' | cat
» U+000BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
’ U+02019 RIGHT SINGLE QUOTATION MARK
” U+0201D RIGHT DOUBLE QUOTATION MARK
› U+0203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
⸃ U+02E03 RIGHT SUBSTITUTION BRACKET
⸅ U+02E05 RIGHT DOTTED SUBSTITUTION BRACKET
⸊ U+02E0A RIGHT TRANSPOSITION BRACKET
⸍ U+02E0D RIGHT RAISED OMISSION BRACKET
⸝ U+02E1D RIGHT LOW PARAPHRASE BRACKET
⸡ U+02E21 RIGHT VERTICAL BAR WITH QUILL
Per inciso: ci sono molti backslashes inutili in quella regex e due catture inutili. 's/[?!.] [] * ['") \] \ p {IsPf}] + \ K + (? = [' "([¿¡\ p {IsPi}] * [] * [\ p {IsUpper}])/\ n/g' dovrebbe essere equivalente per scopi pratici – amon