Литерал списка - это нечто, фактически являющееся списком, записанным в коде, поэтому (1, 2, 3)
- это литерал списка, тогда как, например, caller
- это функция, которая может возвращать список или скаляр в зависимости от контекста.
В строке типа:
my $x = ...;
...
видит скалярный контекст, поэтому, если ...
был литералом списка, то у вас был бы литерал списка в скалярном контексте:
my $x = (1, 2, 3);
но литерал списка не приводит к списку, поскольку содержащийся в нем оператор запятой видит скалярный контекст, который затем приводит к тому, что он возвращает последний элемент литерала списка и выбрасывает оставшиеся значения после их оценки.
С точки зрения функции, сама функция видит любой контекст, из которого она вызвана, который затем распространяется на любую строку в этой функции, которая возвращает.Таким образом, вы можете иметь функцию в скалярном, списочном или пустом контексте, и если последняя строка этого подпункта окажется литералом списка, этот литерал списка увидит любой из этих контекстов и будет вести себя соответствующим образом.
Так что в основном это различие в терминологии: list literal
относится к разделенному запятыми списку значений в фактическом исходном коде *, а list
относится к последовательности значений, помещенных в стек perl.
Вы можетенапишите подпрограммы с возвращаемыми значениями, которые ведут себя как массивы или литералы списков в зависимости от контекста.
sub returns_like_array {my @x = 1..5; return @x}
sub returns_like_list {my @x = 1..5; return @x[0 .. $#x]}
* или что-то, что приводит к списку значений, разделенных запятыми, например qw()
или толстая запятая=>
или хеш или фрагмент массива.
Вы также можете посмотреть мой ответ здесь: Как получить первый элемент из функции, которая возвращает массив в Perl? , которая идетнемного подробнее о списках.