\1
является шаблоном регулярных выражений , что означает "соответствует тому, что было захвачено первым набором пареннов захвата". Нет абсолютно никакого смысла использовать это в выражении замены. Чтобы получить строку , захваченную первым набором пареннов, используйте $1
.
$line =~ s/pwd(\s*)=.*/pwd\1= $newPasswd/
должно быть
$line =~ s/pwd(\s*)=.*/pwd$1= $newPasswd/
так
'pwd(\\s*)=.*' => 'pwd\\1= $newPasswd',
'password(\\s*)=.*' => 'password\\1= $newPasswd',
должно быть
'pwd(\\s*)=.*' => 'pwd$1= $newPasswd',
'password(\\s*)=.*' => 'password$1= $newPasswd',
или еще лучше
qr/((?:pwd|password)\s*=).*/ => '$1= $newPasswd',