Em Perl você não escapa dos parênteses de captura, também é convencional usar $ 1, $ 2 ao invés de \ 1, \ 2 para as variáveis de captura.
perl -pi -e 's/^(.*)->(.*)$/$2 ::= $1 ;/g' test.txt
É um fato lamentável da vida que as regexes (RE) usadas em muitas ferramentas comuns (vim, sed, awk, perl) são todos sutilmente diferentes. Algumas ferramentas têm uma opção para usar Perl REs, POSIX Basic REs (BRE) ou POSIX Extended REs (ERE).
perldoc perlre
tem isto a dizer sobre $1
vs na parte de substituição de uma expressão de substituição
Some people get too used to writing things like:
$pattern =~ s/(\W)/\/g;
This is grandfathered for the RHS of a substitute to avoid shocking the sed addicts, but it's a dirty habit to get into. That's because in PerlThink, the righthand side of an "s///" is a double-quoted string. "" in the usual double-quoted string means a control-A. The custom- ary Unix meaning of "" is kludged in for "s///". However, if you get into the habit of doing that, you get yourself into trouble if you then add an "/e" modifier.