Perl6::Variables - Perl 6 variable syntax for Perl 5


This document describes version 0.01 of Perl6::Variables, released May 17, 2001.


        use Perl6::Variables;

        sub show { print @_[0], @_[1..$#_], "\n" }

        my %hash  = (a=>1, b=>2, z=>26);
        my @array = (0..10);

        my $arrayref = \@array;
        my $hashref = \%hash;

        show %hash;
        show @array;
        show $hashref;
        show $arrayref;

        show %hash{a};
        show %hash{a=>'b'};
        show %hash{'a','z'};
        show %hash{qw(a z)};

        show @array[1];
        show @array[1..3];
        show @array[@array];

        show $hashref{a};
        show $hashref{a=>'b'};
        show $hashref{'a','z'};
        show $hashref.{qw(a z)};

        show $arrayref[1];
        show $arrayref[1..3];
        show $arrayref.[@array];


The Perl6::Variables module lets you try out the new Perl variable access syntax in Perl 5.

That syntax is:

        Access through...       Perl 5          Perl 6
        =================       ======          ======
        Scalar variable         $foo            $foo
        Array variable          $foo[$n]        @foo[$n]
        Hash variable           $foo{$k}        %foo{$k}
        Array reference         $foo->[$n]      $foo[$n] (or $foo.[$n])
        Hash reference          $foo->{$k}      $foo{$k} (or $foo.{$k})
        Code reference          $foo->(@a)      $foo(@a) (or $foo.(@a))
        Array slice             @foo[@ns]       @foo[@ns]
        Hash slice              @foo{@ks}       %foo{@ks}



The module is implemented using Filter::Simple and requires that modules to be installed.


Damian Conway (


This module is not designed for serious implementation work.

It uses some very simple heuristics to translate Perl 6 syntax back to Perl 5. It will make mistakes, if you get even moderately tricky inside a subscript. It's only 20 lines long, for crying out loud.

Nevertheless, bug reports are most welcome.


Copyright (c) 2001, Damian Conway. All Rights Reserved. This module is free software. It may be used, redistributed and/or modified under the terms of the Perl Artistic License (see