use Win32API::File qw( createFile ReadFile CloseHandle ); $|=1; my $share = $ARGV[0]; print("share: $share\n"); { open(my $fh, '>', 'deleteme') or die("Unable to create file: $!\n"); print $fh ("foo\n"); } { my $h = createFile('deleteme', 'r', $share) or die("Unable to open file: $^E\n"); { ReadFile($h, my $buf, 1, [], []) or die("Unable to read from file: $^E\n"); print("Read $buf\n"); } print("pre unlink dir: "); system('dir /b deleteme'); print("pre unlink type: "); system('type deleteme'); if (unlink('deleteme')) { print("File deleted\n"); } else { print("Unable to delete file\n"); } print("post unlink dir: "); system('dir /b deleteme'); print("post unlink type: "); system('type deleteme'); { ReadFile($h, my $buf, 1, [], []) or die("Unable to read from file: $^E\n"); print("Read $buf\n"); } print("pre CloseHandle dir: "); system('dir /b deleteme'); print("pre CloseHandle type: "); system('type deleteme'); CloseHandle($h); print("post CloseHandle dir: "); system('dir /b deleteme'); print("post CloseHandle type: "); system('type deleteme'); } #### >perl 549202.pl rw share: rw Read f pre unlink dir: deleteme pre unlink type: foo Unable to delete file <--- post unlink dir: deleteme post unlink type: foo Read o pre CloseHandle dir: deleteme pre CloseHandle type: foo post CloseHandle dir: deleteme post CloseHandle type: foo >perl 549202.pl rwd share: rwd Read f pre unlink dir: deleteme pre unlink type: foo File deleted <--- post unlink dir: deleteme post unlink type: Access is denied. Read o pre CloseHandle dir: deleteme pre CloseHandle type: Access is denied. post CloseHandle dir: File Not Found post CloseHandle type: The system cannot find the file specified.