Actually the directory is changed, but you don't notice because you are
shelling out. That means your code starts a shell, changes the directory within that shell and then the shell exits. That's not what you want.
Use the builtin function
chdir. That changes the cwd of the running script. (see perlfunc)