Declare your format variables with either
vars or
our and then within the loop use
local e.g
use vars qw($sku, $description, $price, $qty);
foreach my $item (@items) {
local($sku, $description, $price, $qty) = @$item;
write(PURCHASEORDER);
}
Or you could fully qualify your variables in your format and
localize the appropriate variables i.e
use strict;
format STDOUT =
@<<<<<<<
$::foo
.
local $::foo = 'a string';
write STDOUT;
__output__
a string
Or you can declare the lexicals before the format, if that's feasible.
See.
perlform for more info.
update: added second to last sentence and finished the incomplete middle sentence