Все функции Perl, в том числе любые sub
, которые вы определяете, могут определять, вызываются ли они в "скалярном" или "списочном" контексте , и есть много функций, которые изменяют свое поведение на основании этого контекста.
Существует очень мало соглашений, кроме «Что я имею в виду», о том, когда и как функция обрабатывает два контекста по-разному (в этом целом потоке на perlmonks есть хорошее обсуждение этих проблем), поэтому нужно полагаться на документацию каждой функции, чтобы угадать, что функция будет делать в определенном контексте.
Специально для ваших четырех примеров,
1. @backwards = reverse qw/ yabba dabba doo /
2. $backward = reverse qw/ yabba dabba doo /
3. $notbackward = qw/ yabba dabba doo /;
4. print ..., reverse qw/ yabba dabba doo /;
поведение
1. reverse function, list context: returns list of the elements in reverse order
2. reverse function, scalar context: concatenate argument list to a string,
return reverse of that string
3. list assignment to scalar: returns last element in list (*)
4. also reverse function, list context same as #1
(*) - назначение списка примечаний для скаляра отличается от массива назначение для скаляра - это одно из наиболее важных различий между списками и массивами :
@a = ("x", "y", "z"); $n = @a; # array assignment, $n is array size, or "3"
$n = ("x", "y", "z"); # list assignment, $n is last element, or "z"