perlとpythonで直積

#!/usr/bin/env python

import itertools

li = ('apple', 'orange', 'fuck')

print [
    {"from": frm, "to": to } for frm, to
    in itertools.product(li, li) if not frm == to
]

こういうこと(直積を加工したりする)がperlでやりたいとき、

#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my @li = ('apple', 'orange', 'fuck');
my @ret;

for my $from (@li){
    for my $to (@li){
        unless ($from eq $to){
            push @ret, {from => $from, to => $to}
        }
    }
}
print Dumper(@ret);

他にも map/reduce Set::Product とかでも出来るみたい
しかしforがネストしてかっこうわるいけど
一番ソースが読みやすいのはこれでしょうか