my @output= map{ $data=~s/C_USERNAME/$_/rg} @arr;
my @output1= map{ $data=~s/IP/$_/rg} @arr1;
This is almost correct, but note that you are storing the first transformation, using C_USERNAME in @output, and then the second transformation, using IP in @output1. Most likely, you will want to transform everything, after having replaced all C_USERNAME and all IP.
Instead of reusing $data in the second output, you will likely want to use the elements in @output.
my @usernames = map { $data =~ s/C_USERNAME/$_/rg } @arr;
my @user_and_ip;
for my $user_string (@usernames) {
push @user_and_ip, map { $user_string =~ s/IP/$_/rg } @arr1;
}
A better approach would likely be to use a templating engine over your data.