evaluation

{と}の間はカンマを特別に評価しているようなので,特別な評価になるのでしょうか.

評価が特別というより、単に bareword が使えるとかそういう話な気が。
さて、以下のスクリプトの実行結果はどうなるだろうか。実行しないで全部わかった人は結構すごいと思う。

use strict;
use warnings;
use English;
use Dumpvalue;

use constant {
    a => 'c',
    b => 'd',
};


$SUBSEP = '/';

our %hash = (a => 1, b => 2, c => 3, d => 4, 1 => 5, 2 => 6);

$hash{'a', 'b'} = 7;
$hash{'c', 'd'} = 8;
my ($a, $b) = qw(c d);

our @array = 0..9;

sub eval_and_print {
    no warnings qw(syntax void);
    my $exp = shift;
    my @a;
    my $s;

    printf "%-24s: ", $exp;
    print join(', ', eval $exp), $/;
}

sub main {
    my $dumper = Dumpvalue->new;
    $dumper->veryCompact(1);
    $dumper->dumpvars('main', qw(array hash));

    eval_and_print(q(@array[5]));
    eval_and_print(q(@array[5, 7]));
    eval_and_print(q($array[5]));
    eval_and_print(q($array[5, 7]));
    eval_and_print(q($s = @a = @array[5]));
    eval_and_print(q($s = @array[5]));
    eval_and_print(q($s = @a = @array[5, 7]));
    eval_and_print(q($s = @array[5, 7]));

    eval_and_print(q(@hash{a}));
    eval_and_print(q(@hash{qw(a b)}));

    eval_and_print(q(@hash{qw(a b)}));
    eval_and_print(q(@hash{a, b}));
    eval_and_print(q($hash{qw(a b)}));
    eval_and_print(q($hash{a, b}));
    eval_and_print(q($hash{@a = qw(a b)}));
    eval_and_print(q($hash{do { qw(a b) }}));
}

main if $0 eq __FILE__;