One of the themes I've noticed moving from Perl5 to Perl6 is that less syntax is required. While I still need to get the tests to pass, CGI::App is now valid Perl6 syntax. Using "sloccount" on both versions, the Perl6 version has about 4% fewer lines in it. (A drop from 1510 lines to 1450).
Considering Perl5 had fairly efficient syntax already, each little simplification is refreshingly welcome!
Here are some things I noticed that have been removed or simplified:
1;
at the end of a file
use strict;
(on by default)
our $VERSION = 1.23
(part of module declaration now).
new()
is not needed for simple objects. (See The Objects Synopsis)
my $self = shift;
is gone -- my favorite!
$self->{_FOO} is just $!foo
.
my
is no longer necessary in a for
loop.
Instead the syntax is: for @array -> $i {
I'm also starting to refactor Perl5 idioms into more pleasant Perl6 idioms.
Here are two snippets, both valid Perl6, but the second takes advantage of two
new features: qw//
has been replaced with < >
,
and any()
and all()
have added to the core, working like
Quatum::Superpositions in Perl5, which I've always been superstitious about
using in production.
Perl5ish code in Perl6
my %allowed_header_types = ( header => 1, redirect => 1, none => 1, ); print "Invalid header_type '$header_type'" if (not %allowed_header_types<$header_type>);
Refactored to use Perl6 quoting and any()
my @allowed_header_types =My experience with Perl6 thus far has been the sum of a details like this that add up to a more pleasant syntax.; print "Invalid header_type '$header_type'" if not $header_type eq any(@allowed_header_types);
Thanks to TreyHarris and wolverian for post-launch feedback on this post.