#!/usr/bin/perl -w # -*-Perl-*- use strict; use FileHandle; use Digest::MD5; my $sourceFile = $ARGV[0]; my $destFile = $ARGV[1]; my $inFile = new FileHandle; my $outFile = new FileHandle; my $inMD5 = Digest::MD5->new; my $outMD5 = Digest::MD5->new; my ( $fileLength, $fileBuffer, $fileOffset ); $inFile->open ( "<$sourceFile" ) or die "Could not open $sourceFile:$!\n"; $inMD5->addfile ( $inFile ); $outFile->open ( ">$destFile" ) or die "Could not open $destFile:$!\n"; print $inMD5->md5_base64 , "\n"; # borrowed from "Programming Perl" my $blockSize = ( stat $inFile )[11] || 16384; while ( $fileLength = sysread $inFile, $fileBuffer, $blockSize ) { if ( !defined $fileLength ) { next if $! =~ /^Interrupted/; die "System read error: $!\n"; } my $fileOffset = 0; while ( $fileLength ) { my $written = syswrite $outFile, $fileBuffer, $fileLength, $fileOffset; die "System write error: $!\n" unless defined $written; $fileLength -= $written; $fileOffset += $written; }; } $outMD5->addfile ( $outFile ); print $outMD5->md5_base64 , "\n"; $inFile->close; $outFile->close;