Understand Perl context
Perl has a concept called context. Context means context, and there are the following two contexts.
The context evaluated as a scalar is called a scalar context, and the context evaluated as a list is called a list context.
As an example, localtime function returns a string that displays the date/time in the scalar context, and the date/time information in the list context. Is listed and returned.
# Scalar context $date_string = localtime; # List context @date_info = localtime;
To give another example, an array returns the number of arrays in a scalar context and a list of elements in a list context.
# Scalar context $count = @values; # List context @elements = @values;
A detailed explanation of the list is given below.
Scalar context
Here are some places that are evaluated as scalar contexts.
Assignment to a scalar variable
Assignment to a scalar variable is a scalar context. When the array is evaluated in scalar context, it returns the length of the array.
my $num = @values;
Comparison operator term
The left and right terms of comparison operator are scalar contexts.
$x <@values $x == @values
I often see it in the loop of for statement.
for (my $i = 0; $i < @nums; $i++) { ... }
if condition part
The conditional part of if is the scalar context. In the following, @values is evaluated in scalar context, so it returns the number of arrays.
if (@values) { ... }
A detailed explanation of the scalar context is given below.
List context
Here's where it's evaluated as a list context.
Assignment to an array
Assignment to array is a list context.
my @values2 = @values;
List
Inside list is the list context.
(@values);
Subroutine arguments
The argument of subroutine is the list context.
func (@values);
A detailed explanation of the list context is given below.
Example
This is an example to understand the scalar context and list context.
use strict; use warnings; # Scalar context and list context print "1: Know the meaning of the context with the localtime function.\n"; my $scalar; my @list; # Since the left side is scalar, it is for scalar # The return value of is returned. $scalar = localtime; # The left side is an array, so it's for a list # The return value of is returned. @list = localtime; print "formatted date\n in scalar context", "'$scalar'\n\n"; print "In list context, a list of date and time values \n". join(',', @list). "\n\n";
Perl functions can return a scalar return where a scalar is required and a list return where a list is required.
The distinction between a scalar context and a list context is naturally remembered as you touch Perl. Here is an example. If the left side is a scalar, it is a scalar context, and if the left side is an array, it is a list context.