| Home » Faqs » System » Binmode |
The runtime libraries of some operating systems make a distinction between binary and text files. In these operating systems, if you write binary data to a file it will come out as gumph.
Immediately after you call open on the file, use the binmode function:
open (OUTFILE, ">$filename") or die "Couldn't open $filename for writing: $!";
binmode OUTFILE;
Then just print to the file like usual:
print OUTFILE $binary_data;
Here's a full example which reads in the file test.jpg and prints it to test2.jpg:
#!/usr/bin/perl
use strict;
use warnings;
my $buffer;
my $num_bytes = 1024;
my $infile = "test.jpg";
my $outfile = "test2.jpg";
open (INFILE, $infile) or die "Couldn't open $infile for reading: $!";
open (OUTFILE, ">$outfile") or die "Couldn't open $outfile for writing: $!";
binmode(INFILE);
binmode (OUTFILE);
while (read(INFILE, $buffer, $num_bytes)) {
print OUTFILE $buffer;
}
close INFILE;
close OUTFILE;
exit 0;
perldoc -f binmode
perldoc -f open