Why are you using opendir/readdir to get the list of files in $DIR? Why not just pass $DIR to find and let that function find all of the files?
I don't see how you're getting paths that include '/../'. I don't think that readdir will return them. Perhaps I'm missing some obscure symlink usage.
I'm also surprised that you're not getting a 'Can't "next" outside a loop block' or 'Exiting subroutine via next' error as your next if line should surely be return if.
If it's really necessary (and I don't think it is) then you could add another line that matches the problematic paths.
return if m[/\.\./];
<code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>