Here's a more general answer, though if you can wait for Perl 6, the weave (zip, or whatever) operator will be builtin or at least in a module instead of a hacked sub:
my $n = 30;
print weave([map{$_%3?' ':"\n"}0..$n-1],[1..$n]);
sub weave {
my @t;
{ @$_ ? push @t, shift @$_ : return @t for @_; redo; }
}