Другие уже ответили, указав причину проблемы - пробел между = ~
, который должен был быть =~
без пробела.
Ценный урок - всегда добавлять use strict
к вашемускрипты;если бы вы сделали это, вы бы получили предупреждение вроде:
Use of uninitialized value $_ in substitution (s///) at (eval 11) line 4.
Это помогло бы вам выяснить, что оператор подстановки использовался на $_
, а не на $data_dir
-потому что вместо оператора привязки =~
, связывающего его с $data_dir
, у вас был = ~
.
Итак, урок для изучения: всегда use strict
- это поможет поймать такие вещи, где выможет иметь неправильный одиночный символ и сэкономить вам много времени.
Кстати, при работе с путями к файлам и желании переносимости между платформами, использование File :: Spec часто является хорошей идеей.