Thanks for this highly useful thread.
I'd just like to point out that Perl 6 addresses almost every one of these dislikes (and even a few of clintp's favorite things):
The $#var syntax
Gone in Perl 6. It becomes
@var.end or
@var.last (probably the former, though I used the latter in E4).
Ranks right up there with $[
Gone in Perl 6. Replaced by an overloaded
FETCH method on individual (or classes of) array-like objects.
no commas are allowed after the filehandle
As
Dominus explained, using the comma isn't really a viable option. But whitespace as the syntactic marker for indirect objects probably wasn't the best choice either, in hindsight. Hence the use of the colon for that role in Perl 6.
$/, $\, $|, $", and $,
Gone in Perl 6. Replaced by methods on individual filehandles.
open FH, $file
Gone in Perl 6.
Dominus gets his wish; it becomes
$fh = open $file.
Implicit conversion of references to strings.
(Probably) gone in Perl 6. You'll need to explicitly stringify (using unary
_).
v-strings
I don't know if Larry has considered their disposition yet.
pseudohashes
Gone in Perl 6. And going in Perl 5, for that matter.
$ used on single elements of hashes and arrays
Gone in Perl 6. Perl 6 variables
never change sigils.
<> globbing
Gone in Perl 6. Use
glob.
$;
(Probably) gone in Perl 6. Though the functionality might remain (as a per-hash or per-class method).
Symbolic references
Staying in Perl 6.
Perl's laissez faire approach to OO.
Staying in Perl 6. But being augmented by a second, B&D, OO mechanism.
BTW, those who are complaining are, for the most part, neither grinding axes nor bondage freaks. They are generally people with large commercial OO production systems to build, who would prefer not to have to jump through so many hoops to get compile-time checking, declarative attributes, pre- and post-conditions, strong encapsulation, etc. That is, they genuinely need all those valuable, scalable OO tools that Perl 5's laissez faire approach to OO trades off.
Punctuation.
Staying in Perl 6. But being simplified (e.g. sigils) and rationalized (e.g. fewer global punctuation vars).
Built-in networking and IPC functions
Staying in Perl 6. But becoming automagically loaded when used rather than bloating the core. (Hey, you want to be able to run perl on your Palm Pilot, don't you? ;-)
eval $string
Staying in Perl 6.
Globs
Gone in Perl 6. Every symbol has its own entry in some symbol table.
package variables.
Staying in Perl 6. And augmented by a third storage type: truly global variables.
local
Staying in Perl 6. Though the name isn't, since it just confuses people.
Punctuation variable names.
Staying in Perl 6. Though there will be fewer of them, and they'll be lexicals, not globals.
The entire approach to sockets in perl
I don't know Larry's thinking on this as regards Perl 6, except that the socket functions will also be autoloaded on demand, rather than mooching around the core. The interface certainly could do with some additional Perlification though...and some documenting.
chop
Very probably gone in Perl 6.
chomp
Possibly gone (as an independent function) in Perl 6. But
Yuckfoo's wish is certainly granted: filehandles will be able to autochomp.
scalar @var
Evolving in Perl 6. Only returns the count in numerical contexts (but use of explicit
@var.length encouraged instead). In non-specific scalar contexts, returns a reference to the array.