Here are a few of my favourite Perl 6 selling points: * Compactness of expression:
say 'Hello, World!'; * Compactness of expression + semi-infinite data structures: @fib = 1,1...&[+] # The entire Fibonacci sequence * Junctions make comparisons much more natural: if $dice_sum == 7 | 11 { say 'Natural!' } elsif $dice_sum == 2 | 3 | 12 { say 'Craps!' } * Given/when takes that even further: given $dice_sum { when 7 | 11 { say 'Natural!' } when 2 | 3 | 12 { say 'Craps!' } } * Junctions + n-ary comparison help too: if 0 < all(@coefficients) <= 1 { say 'Coefficients are already normalized.'; } * Junctive comparisons + the max operator: if any(@new_values) > all(@existing_values) { $upper_limit = [max] @new_values; } * .invert and .push makes hashes (especially hoa's) vastly more useful (and .perl makes debugging vastly easier): my %comments = perl6 => <Amazing Revolutionary>, perl5 => <Essential Amazing>, perl4 => <Classic>, perl1 => <Classic>; my %epithets; %epithets.push(%comments.invert); say %comments.perl; say %epithets.perl; * Unicode source and data overthrows US cultural hegemony! (oh, and Hinrik has the coolest name in the entire Perl community :-) my @recepción; my $Gruß = 'olá' my $óvoµa = 'Hinrik Örn Sigurðsson'; push @recepción, "$Gruß, $óvoµa!"; * Unary method call + topicalization simplifies multiple operations on objects: for @parcels { .address; .weigh; .ship; while .shipping { .fold; .spindle; .mutilate; } .deliver; } * Subtypes make typing far more precise (and hence more useful): my $filename of Str where /\w**8 '.' \w**3/; my $octet of Int where { 0 <= $^value <= 255 } * Command-line parsing using standard language features: sub MAIN ($text, Bool :f($foo), Str :B($bar), *...@files) { ... } # Can then be invoked as: > my_prog.p6 -f -Bbaz 'two words' file1 file2 etc * Grammars built into the language: grammar Expr::Arithetic { rule Expression { <Mult> ** $<OP>=< + - > } rule Mult { <Pow> ** $<OP>=< * / % > } rule Pow { <Term> ** $<OP>=< ^ > } token Term { <Literal> | '(' <Expression> ')' } token Literal { <[+\-]>? \d+ [ \. \d+ ]? } } * Grammar inheritance: grammar Expr::Algebraic is Expr::Arithetic { token Literal { <alpha>+ | <Expr::Arithetic::Literal> } } * "Only perl can parse Perl 5" but "Even Perl 6 can parse Perl 6": given $source_code { $parsetree = m:keepall/<Perl::prog>/; } And that's without even mentioning all the new OO features, multiple dispatch, roles, delegation, macros, etc., etc. The problem with demo- ing the awesomeness of Perl 6 is always running out of demo time before running out of demo-able awesomeness. Damian PS: A really mean, but very effective, way of emphasizing the ease, expressiveness, compactness, and readability of Perl 6 code is to take each of the examples and show the same thing written in Java. >;-)