seek XML, 0, 0; #### use strict; use warnings; use Tie::File; my $filename = ...; tie my @array, 'Tie::File', $filename or die "Cannot tie file '$filename' to array: $!"; for my $line (@array) { my $newline = $line; # Make a copy while ($line =~ / Name=(.*?) \s+ Password=(.*?) (?:\s+|$) /gx) { my $name = $1; my $password = $2; print "Enter the plain text password for $name, ", "password is currently '$password'\n"; chomp(my $newpass = <>); print "You will now swap $password for Password='$newpass'\n"; print "Continue? (y/n)\n"; chomp(my $answer = <>); # Change the copy $newline =~ s{Password=\Q$password\E}{Password=$newpass} if $answer =~ /y/i; } $line = $newline; # Update this line in the file } untie @array or die "Cannot untie file '$filename': $!";