I see one major problem here: closures. When you use Apache::Registry, it wraps all of your code inside of another subroutine. Lexical variables like $article_row that you declare outside of your subs and then use in the subs result in closures, meaning that your sub edit_news() will maintain the first value of $article_row forever, kind of like a global variable that you can never reach. This is all explained
here in the mod_perl guide.
To solve this problem, you could either stop using Registry and write normal modules, or switch your subs to accept passed parameters instead of referring to these lexicals that are declared outside of their scope.
Also, your two calls to use CGI are redundant. You can remove the first one.