my %x = (field => $F[$_ - 1], value => $F[$_]);
to become this...
my %x = (field => $F[(--$_)++], value => $F[$_]);
or maybe even...
my %x = (field => $F[--$_++], value => $F[$_]);
Now that would be a fun idiom! As things stand, this works:
my %x = (field => $F[--$_], value => $F[++$_]);
That said, my initial boring version is probably more readable.
Update: I've just remembered the secret inchworm-on-a-stick operator. This is one of those rare opportunities it's actually useful:
my %x = (field => $F[~-$_], value => $F[$_]);
perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'
|