俺ならこうかな。

sub ejoin(&@)
{
my ($sep, $s, @n) = @_;

$s .= $sep->() . $_ foreach (@n);

return $s || '';
}

my $i = 0;
print ejoin(sub { print $i, "\n"; (++$i % 2) ? '+' : '-' }, 1 .. 6);