Я скажу вам одна вещь не так. system("cd $dir");
создаст под-оболочку, перейдет в каталог внутри этой под-оболочки и выйдет.
Процесс, выполняющий Perl, все еще будет в своем первоначальном каталоге.
Я не уверен, что это ваша конкретная проблема, поскольку # Fail here
немного освещает детали: -)
Одно из возможных исправлений:
system("mkdir $dir && cd $dir && wget $url");
Это сделает всю работу в одной суб-оболочке, поэтому не должно страдать от упомянутых проблем.
На самом деле этот скрипт работает нормально:
use strict;
use warnings;
system ("mkdir qwert && cd qwert && pwd && cd .. && rmdir qwert");
Вывод:
/home/pax/qwert