Разница в том, что "..." - это строка (один скаляр), а (5, 0)
- список из двух скаляров.Итак, в первом фрагменте вы на самом деле делаете это:
my %data_variables = ("Sno.", 5, 0, "ID", 20, 1, "Address", 80, 3, "Certificate", 170, 4);
Поскольку хэши - это просто списки с четным числом элементов, это будет работать, когда число элементов четное, но не удастся, еслистранный, как в вашем примере.
Если вы хотите сохранить массивы как значения в хэше, используйте вместо этого [5, 0]
.