sub XMLisComplete { my $file = shift(); open my $IN, '<', $file or return; # if I can't open it, it's probably locked. Therefore it's not complete. my $main_tag; read $IN, $main_tag, 1024; if ($main_tag =~ m{<(\w+)}) { $main_tag = $1; } else { return; # there's not even the opening tag! } seek $IN, 2, -100; my $end = do {local $/; <$IN>}; close $IN; if ($end =~ m{\s*$}s) { return 1; } else { return; } }