For some reason, when the value in $version is E48.2, the script can't enter the last if clause to find the $suffix value.
Why do you say that?. I would say instead that if $version is E48.2 then the part you call "Find suffix value" does not set $suffix like you claim it should. Since you have not shown us that part of the code how can we tell you why it failed. For us to help you we are going to have to see that part of the code
another thing that bothers me is that the message "Use of uninitialized value $suffix in concatenation" is the type of message given out when you say "use warnings;" but i dont see that in your code. while "use strict; use warnings;" is a good idea and i suggest it, this leads me to thing there are other parts of code you are not showing us too. For us to help you well will need an example that will compile, and shows us a path that fails like you claim it fails. Like stevieb points out this example does not do that