I am not sure where the '^M' characters are coming from. They are a representation of the carriage return.
Are you showing the entire contents of the log file. What you have shown is only from the hostname on down. The header should be the first thing in the log. (If you are concerned about revealing to much information, just change any hostname/addresses/passwords you need to)
You have the replacement of "system" in the correct place. The problem occurs when you have more than one system. After the first call $header will no longer contain the string "system", and so the previous system name will remain in the header. The solution is to work with a local copy of the header.
my $my_header = $header;
$my_header =~ s/system/$system/;
my $ssh = Expect->new('ssh amagana@' . $system);
$ssh->expect ( $timeout, ...
Also note that by default Expect opens the log file for appending, so if you don't delete it and only look at the top of the file you will not see the new entries.