
Issue #19544 has been updated by hurricup (Alexandr Evstigneev). mame (Yusuke Endoh) wrote in #note-1:
Presumably because of some look-ahead distincting % from percent-string starter
It depends on the lex state, not look-ahead. If you place `%` in a context where the beginning of an expression is expected, you can write %-literal with spaces as delimiters.
``` p(% foo ) #=> "foo" p(% jim\ beam ) #=> "jim beam" ```
`%w` cannot be used with a space delimiter because it interprets all whitespace characters as a word delimiter.
Thank you! This sounds reasonable. Then feels that list-like quotations ops `[WwIi]` should error about `\s` term, not unterminated list, which may be confusing. ---------------------------------------- Bug #19544: Custom quotes inconsistency https://bugs.ruby-lang.org/issues/19544#change-102521 * Author: hurricup (Alexandr Evstigneev) * Status: Open * Priority: Normal * Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN ---------------------------------------- According to `parse_percent` in `parse.y`: For `%` we should be able use ascii non alphanumeric delimiters. But, `p % jim beam ;` does not work. Presumably because of some look-ahead distincting `%` from percent-string starter. Seems it is the same for any `\s` after `%` For the explicit `%` construction, with type specifier `%[QqWwIisrx]` we should be able to use non-alphanumeric ascii characters, which includes `\s`. But: This works: ``` p %s jim beam ``` And this does not: ``` p %w jim\ beam ``` with unterminated list error. First seems unavoidable, but second looks like obvious error of finding terminating `\n` -- https://bugs.ruby-lang.org/