Возможно, проблема в том, что вы используете $ DataQueue в одном месте, а $ DQueue в другом месте? Убедитесь, что вы используете строгие и предупреждения.
Если $ iElement может быть ложным (например, 0), вам нужно будет сказать
while ( defined ( my $DataElement = $DQueue->peek($count) ) )
Исправляя имя переменной и вставляя некоторый код для вызова updateData, мне показалось, что все работает.