We can dream, can't we?
- Strictures on by default
- I don't like the dot . for string concatenation, it's too easy to overlook. Use ~ instead. Method calls can then be written as $obj.meth
- Variable binding with :=. Disallow empty attributes instead. (my $x := is now parsed as my $x with empty attribute at the LHS)
- Optional signatures for subs and methods.
- Remove the comma operator for separating statements (like in do_a(), do_b() for @list). That way we could parse many lists unambiguously without parenthesis.
- Strictly separate byte strings and text strings. Regexes that contain codepoints larger than 255 should not be applicable to byte strings (and should croak), likewise doing IO with text strings. The current approach is hard to understand and hard to debug.
- Make string functions (like length, substr etc.) act on graphemes instead of codepoints by default.
I admit that most of that (if not all) is bluntly stolen from the Perl 6 synopsis. It's the subset of features I really like, and that could be integrated into perl 5 without making it a different language altogether.