Cross posted on the Perl Guru forum:
http://perlguru.com/gforum.cgi?post=83831;sb=post_latest_reply;so=ASC;forum_view=forum_view_collapsed;;page=unread#unread.
There is nothing wrong with cross-posting questions, but it is considered polite to inform the reader (and provide the link) to prevent duplication of work in various location of the Internet.
For reference, here's the one-liner solution I had posted on that other site before seeing this post here:
$ echo 'cfg_a
cfg_b[2:0]
cfg_c[4:0]
cfg_d ' | perl -ne '($cf, $num) = ($1, $2) if /(cfg_\w+)(\[\d:\d\])
+*/; print "logic $num $cf\n";
'
logic cfg_a
logic [2:0] cfg_b
logic [4:0] cfg_c
logic cfg_d