use warnings; use strict; use IPC::SysV qw(IPC_PRIVATE IPC_RMID S_IRUSR S_IWUSR); open(my $idx, "<", "$ARGV[0].idx") || die "cannot open data file\n $!"; my $idx_size = (split(' ',`wc -c $ARGV[0].idx`))[0]; my $idx_id = shmget(IPC_PRIVATE , $idx_size, S_IRUSR | S_IWUSR) || die "shmfet $!"; my $offset = 0; foreach my $i (0..$idx_size/1000000) { my $n=""; read($idx,$n,1000000); shmwrite($idx_id, $n, $offset, 1000000) || die "shmwrite: $!"; $offset +=1000000; } shmctl($idx_id, IPC_RMID, 0) || die "shmctl: $!"; close $idx; exit;