В чем разница между @ и $ при доступе к элементам массива в Perl?

У меня есть 2 основных вопроса по переменным Perl.

@names = ('Super_!','Massive_@',"Black#", "Hole*");
print "Top Player: @names[0]\n";
print "Top Player: $names[0]\n";

Хотя нет никакой разницы между выводом, какова фактическая разница при попытке доступа к элементам @ и $.

Кроме того, при объявлении массивов строк, в чем разница между определением элемента в одинарной кавычке и двойной кавычкой?


person Ramneek Singh Kakkar    schedule 13.06.2020    source источник
comment
Здесь уже отвечаю   -  person ssr1012    schedule 13.06.2020
comment
Пожалуйста, задавайте несвязанные вопросы в отдельных Вопросах.   -  person ikegami    schedule 14.06.2020


Ответы (1)


Как вы знаете, знак @ указывает на array, а $ знак указывает на scalar.

Поскольку вы собираетесь получить доступ к элементу массива, равному scalar, предпочтительнее использовать $, иначе вы получите предупреждение, если определили use warnings;.

Другими словами, в Perl префикс переменной представляет то, что вы хотите иметь, а не то, что имеете.

--

Одинарные ' и двойные кавычки " используются для определения строк, но двойные кавычки "hello $name" позволяют использовать интерполяцию строк.

person Mahdi Zarei    schedule 13.06.2020
comment
Это неверный ответ. @ означает несколько элементов, а $ означает один элемент. Вот почему доступ к одному элементу массива равен $array[$i], а хеш-срез - @hash{@keys}. - person brian d foy; 14.06.2020