#!/usr/bin/perl -w use strict; # This program will insert all or part of one # file inside of another use List::Util qw(min); # check the arguments if (@ARGV < 2 ) { die "Usage: insert.pl infile outfile [ startin [ startout [ endin ]]]\n"; } # open the files open ( FILOLD, '<', "$ARGV[0]" ) or die "Can't open $ARGV[0] for reading.\n"; open ( FILNEW, '+<', "$ARGV[1]" ) or die "Can't open $ARGV[1] for writing.\n"; # see what we want to copy my $start = 0; if (@ARGV >= 3 ) { seek(FILOLD, $ARGV[2], 0) or die "Can't seek to position $ARGV[2] in $ARGV[0].\n"; $start = $ARGV[2]; } if (@ARGV >= 4 ) { seek(FILNEW, $ARGV[3], 0) or die "Can't seek to position $ARGV[3] in $ARGV[1].\n"; } my $end = (stat(FILOLD))[7]; if (@ARGV == 5 ) { $end = min($ARGV[4], $end); } my $bytes = $end - $start; # do it while ($bytes > 0) { read FILOLD, my ($buffer), min(1024, $bytes); print FILNEW $buffer; $bytes -= 1024; } # close the files close FILOLD; close FILNEW;