in reply to search and replace pattern inside file not working as expected

It looks like a variable scoping issue. You set $alter to 3 outside your while loop. Inside your while loop, you declare another variable, also named $alter, which is different from the $alter outside your while loop. Then you check $alter after your while loop. Since it is still 3, if ($alter == 1) evaluates to false.

You can prove this to yourself with more liberal usage of print (tip #2 from the Basic debugging checklist), such as inside your while loop.

In the future, receiving help would be much more efficient if you provide a smaller code example which is completely self-contained (not relying on external files). Using perltidy before posting would also make your code clearer.

Update:

not using my to declare variables ...
You can replace:
use vars qw($change $alter);
with:
my ($change, $alter);
Further reading in the Tutiroals section: Variables and Scoping