Fix parsing of %{EXPR} and @{EXPR} as hash/array dereferences #99
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
%{expr}was incorrectly parsed as an infix modulo operator when used as an argument to functions likesay. For example:was parsed as
(say $_) % {hash_literal}instead ofsay(%{sub...->()}), producing:Fix
Added
{to the lookahead check inlooksLikeEmptyList()so that%{...}and@{...}are recognized as hash/array dereferences rather than infix operators.Testing
./jperl -E 'say %{sub {{ a => 3 }}->()}'now correctly outputsa3(matching Perl behavior)Context
This fix is needed for
JPERL_LARGECODE=refactorwhich generates constructs like%{sub{...}->()}to wrap large hash literals.