Я не мог понять, в чем проблема с кодом, который вы цитировали, поэтому я написал короткий тестовый скрипт и пропустил его через Perl.
#! perl
use warnings;
use strict;
my $allDirArray = [{dir => "b"},{c => "d"}];
my $i = 0;
my $tempDir = ${$allDirArray}[$i]{'dir'};
print "$tempDir\n";
Как написано выше, с использованием Perl 5.10 на Cygwin программа работала следующим образом:
$ perl allarraydir.pl
b
Сообщение об ошибке не печаталось. Смотри http://codepad.org/pH4eyMlt
Редактировать
После включения предложения Телемаха, я добавил следующий код в конец вышеуказанной программы:
# The following addition was included re telemachus's comment
my @allDirArray2 = ({dir => "b"},{c => "d"});
$tempDir = ${$allDirArray2}[$i]{'dir'};
print "$tempDir\n";
запустил его снова и получил следующее сообщение об ошибке:
$ perl allarraydir.pl
Global symbol "$allDirArray2" requires explicit package name at
allarraydir.pl line 10.
Execution of allarraydir.pl aborted due to compilation errors.
(это действительно должен быть комментарий к вашему вопросу, а не ответ, но код слишком длинный.)