in reply to Comparing variables

Ok. Your first issue is that your code isn't doing what you think it's doing. When reformatted, it looks something like:
sub check_server_exist { my($svr) = "\Uempdb"; my($sql_in) = "d:\\tmp\\sql.txt"; my @check_name = (); open(SQL_INI, "<$sql_in") or die "can't open the file: @sql_in $! \n"; while (<SQL_INI>) { chomp; s/#.*//; s/^\s+//; s/\s+$//; #push(@check_name, $_); } print "This is the server name: $svr\n"; if ($_ =~ m/${svr}/ || $_ =~ m/${svr}_BACKUP/ || $_ =~ m/${svr}_REP/ || $_ =~ m/${svr}_RSM/ || $_ =~ m/${svr}_XP/) { print "Server name exists\n\n"; &leave; } } };
As written, this code doesn't even compile, because of the extra }; at the end. However, taking that out, you'll notice that $_ isn't set to anything when you do the if-checks. This means that the if-check will always fail. (I don't know how you're getting what you're getting, but the if-check will always fail.) You would have noticed at least some of this had you used strict and warnings.

ALWAYS USE STRICT AND WARNINGS

Now, given that, you should be able to work your way through what's going on.

------
/me wants to be the brightest bulb in the chandelier!

Vote paco for President!