ブロックは関数渡しの構文糖だろ。例えばこういう関数
sub for_with_i {
    my ($fn,@lst) = (shift, @_);
    my $i = 0;
    for (@lst) {
        $fn->($i++, $_);
    }
}

for_with_i (sub { my ($i,$elem) = @_;
                  print "$i: $elem\n"; },
            qw(apple orange strawberry));

これが構文等を使えば
sub for_with_i2 (&@){
    my ($fn,@lst) = (shift, @_);
    my $i = 0;
    for (@lst) {
        $fn->($i++, $_);
    }
}

for_with_i2 {
    my ($i,$elem) = @_;
    print "$i: $elem\n";
} qw(apple orange strawberry);

こう書けるようになる。
for_with_iは高階関数であり、それに渡した関数はもちろんスコープを作る。
無論構文糖なので後者もスコープを作る。
しかしXS版では作らない。これはおかしい。