{"atom":"regression/interp-identifier-chars","family":"regression","slug":"interp-identifier-chars","header":{"atom":"regression/interp-identifier-chars","kind":"whole-program — a minimal repro, not yet reduced to an atom","source":"curated"},"axes":null,"cols":null,"engines":["rakudo-2026.07","rakupp-3.14.0"],"kinds":["ref","pp"],"defFrom":"rakupp:t/regression/interp-identifier-chars.raku","counts":{"a":1,"f":0,"d":0,"c":0,"r":0,"n":0},"files":["atoms/regression/interp-identifier-chars.grid"],"records":[["0001","","# From the Cognates port (docs/rakupp-findings finding 8): string interpolation\n# treated every non-ASCII BYTE as an identifier character, so `\"$v…\"` swallowed the\n# ellipsis into the name and printed its own source text, while `\"$v🙂\"` reported\n# an undeclared variable. Raku names DO take Unicode letters, so the rule is\n# ID_Continue, not \"stop at non-ASCII\".\n# Contract: exit 0 + last line PASS.\nmy @fail;\nsub check($got, $want, $what) { @fail.push(\"$what: got {$got.raku} want {$want.raku}\") unless $got eq $want }\n\nmy $v = 'X';\ncheck(\"$v.\",    'X.',   'a full stop ends the name');\ncheck(\"$v y\",   'X y',  'a space does');\ncheck(\"…$v\",    '…X',   'a leading ellipsis was always fine');\ncheck(\"$v…\",    'X…',   'a TRAILING ellipsis (U+2026 Po) is not part of the name');\ncheck(\"«$v»\",   '«X»',  'guillemets (Pi/Pf) are not');\ncheck(\"$v–\",    'X–',   'an en dash (U+2013 Pd) is not');\ncheck(\"$v🙂\",   'X🙂',  'an emoji (So) is not');\ncheck(\"$v€\",    'X€',   'a currency sign (Sc) is not');\n\n# …but a Unicode LETTER really does continue an identifier, in both engines.\nmy $vкнига = 'U';\ncheck(\"$vкнига\", 'U', 'a Cyrillic continuation is ONE name');\nmy $naïve = 'N';\ncheck(\"$naïve\",  'N', 'a Latin-1 letter with a diacritic too');\n\n# The ASCII rules are unchanged.\nmy $a-b = 'H';\ncheck(\"$a-b!\",  'H!',  'a hyphenated name still lexes');\nmy @list = 1, 2;\ncheck(\"@list[0]…\", '1…', 'an @-sigil subscript then an ellipsis');\nmy %h = k => 'V';\ncheck(\"%h<k>…\",    'V…', 'a %-sigil subscript then an ellipsis');\n\nif @fail { note \"FAILED:\\n\" ~ @fail.join(\"\\n\"); say 'FAIL' } else { say 'PASS' }","output PASS","a",["PASS","PASS"],0,[["budget","20s"]]]]}