$/ = "\$\n"; open BIGFILE, yada yada or die; while () { my ($filename, $guts) = split /\n/, $_, 2; open SMALLFILE, ">$filename" or die; print SMALLFILE $guts; close SMALLFILE; } close BIGFILE; #### use File::Slurp qw( write_file ); $/ = "\$\n"; open BIGFILE, yada yada; while () { write_file(split /\n/, $_, 2); }