Скалярный контекст - это то, что вы получаете, когда ищете одно значение. Контекст списка - это то, что вы получаете, когда ищете несколько значений. Одно из самых распространенных мест, где можно увидеть это различие, - при работе с массивами:
@x = @array; # copy an array
$x = @array; # get the number of elements in an array
Другие операторы и функции также являются контекстно-зависимыми:
$x = 'abc' =~ /(\w+)/; # $x = 1
($x) = 'abc' =~ /(\w+)/; # $x = 'abc'
@x = localtime(); # (seconds, minutes, hours...)
$x = localtime(); # 'Thu Dec 18 10:02:17 2008'
Как оператор (или функция) ведет себя в данном контексте, зависит от оператора. Не существует общих правил поведения вещей.
Вы можете сделать свои собственные подпрограммы чувствительными к контексту, используя функцию wantarray
для определения контекста вызова. Вы можете принудительно вычислять выражение в скалярном контексте, используя ключевое слово scalar
.
Помимо контекстов скаляра и списка, вы также увидите контексты «void» (ожидаемое возвращаемое значение) и «логическое» (ожидаемое значение true / false), упомянутые в документации.