There's many CPAN modules (most of them mine ;) ) that add extra syntax, which currently hugely confuses the parser. A few of these have even been ported to becoming core syntax, enabled with various use feature flags.
It may be worth looking into what extent some features can be made optional somehow. Ideally it'd be great if we could handle all of:
# Future::AsyncAwait
async sub f { await g() }
# Syntax::Keyword::Dynamically
dynamically $x = 123;
# Syntax::Keyword::Try or Feature::Compat::Try or use feature 'try';
try { A() }
catch($e) { B() }
finally { C() }
# Syntax::Keyword::Defer or Feature::Compat::Defer or use feature 'defer';
defer { D() }
# Object::Pad
class Thing v1.23 :isa(OtherThing) {
has $var :reader :writer :param;
method m($x) { }
}
# List::Keywords
any { $x > 10 } @numbers;
# Syntax::Keyword::Match
match($var : eq) {
case("one") { ... }
case("two") { ... }
}
There's many CPAN modules (most of them mine ;) ) that add extra syntax, which currently hugely confuses the parser. A few of these have even been ported to becoming core syntax, enabled with various
use featureflags.It may be worth looking into what extent some features can be made optional somehow. Ideally it'd be great if we could handle all of:
# Syntax::Keyword::Defer or Feature::Compat::Defer or use feature 'defer'; defer { D() }