##
my $len = 3;
print join ';', (split(/;/), ('') x $len)[0 .. $len-1];
####
my %foo =
map { (split /:/, $_, 2)[0, 1] } # Implicit "default" undef.
qw/
foo:bar
baz
zip:zap:zoom
/
;
use Data::Dumper;
print Dumper(\%foo);
__END__
$VAR1 = {
'baz' => undef,
'foo' => 'bar',
'zip' => 'zap:zoom'
};
####
my %foo = map { split /:/ } ...;