You could create the file content in advance,
and save (possible) system calls.
my $fill_char = " ";
my $string = $fill_char x $nr_of_bytes;
open FW, ... ;
print FW $string;
close FW;
With this approach you do only one print,
open and close systemcall. As systemcalls can
take up much time, this would be lot faster.
You also give the perl compiler more chance of
optimizing by not forcing it to use a loop.
Also, if you are on a machine with a gigabyte
of ram, who cares about your script taking one
MB for it's job. If you're planning to use more
than 50 MB or so.. You should check out the tools
that have been build for this kind of job. See the
'dd' manpage if you are on a *NIX box.