use strict; use warnings; my $f=shift || die "File that your want to split\n"; my $chunk_size=shift || die "Chunk size\n"; my $dir=shift || die "Directory where the chunks are stored\n"; my $fsize=-s $f; my $size=0; my $buffer; my $BUFFER_SIZE=4096; my $nr_of_chunks=0; my $nr=0; if($chunk_size=~/(\d+)([mMgG])/) { my $numb=$1; my $tp=$2; SW: { ($tp eq "g" || $tp eq "G") && do { $numb*=1024*1024*1024; $size=$numb; last SW; }; ($tp eq "m" || $tp eq "M") && do { $numb*=1024*1024; $size=$numb; last SW; }; } } else { $size=$chunk_size; } open(F,$f) || die "OPEN : $!\n"; binmode(F); if(! -e $dir) { mkdir($dir) || die "DIR : $!\n"; } chdir($dir) || die "CHDIR : $!\n"; FILE:{ if(($fsize - $size)<=0) { my $count=0; print "Creating file $nr\n"; open(C,">$nr") || die "CREATE : $!\n"; binmode(C); while($count != $fsize) { $count+=read(F,$buffer,$BUFFER_SIZE); print C $buffer; } close C; last FILE; } else { my $count=0; print "Creating file $nr\n"; open(C,">$nr") || die "CREATE : $!\n"; binmode(C); while($count != $size) { $count+=read(F,$buffer,$BUFFER_SIZE); print C $buffer; } close C; $fsize-=$size; $nr++; redo FILE; } } print "Over & Out\n";