Perl | Scalar Context Sensitivity

Introduction:
In Perl, function calls, terms, and statements have inconsistent explications which rely upon its Context. There are two crucial Contexts in Perl, namely List Context and Scalar Context. In a list context, Perl gives the list of elements. But in a scalar context, it returns the number of elements in the array. When an operator functions on Scalars then its termed as Scalar Context.
Note:

  • Whenever you assign anything to a Scalar variable it will always give Scalar Context.
  • In this Context, presumption is to obtain a single value.
  • An array if assigned to Scalar variable will return its size.
Creating a Scalar Context

 
Scalar Context can be generated with the use of Scalar variables, Numerical operator, and many more.

  • Assignment to a Scalar variable:
    Example:

    $x = @z;
    $x = localtime();
    $x = Scalar;

    Here, localtime() displays time in human readable format whereas in List Context this function shows number depiction of time.

  • Assignment to a single element of an array:
    Example:

    $a[2] = Scalar;

    Every element of an array is individually a Scalar. So, assignment to them generates Scalar Context.

  • Numerical operators creating Scalar Context:
    Example:

    3 + Scalar;
    Scalar + 3;

    A numerical operator can generate Scalar Context on either sides of it.

  • Concatenation creating Scalar Context:
    Example:

    "GFG" . Scalar;
    Scalar . "GFG"

    From the above example, it is clear that Concatenation can generate Scalar Context on both side of itself.

Example:

filter_none

edit
close

play_arrow

link
brightness_4
code

#!/usr/bin/perl 
# Perl program of creating Scalar Context 
  
# array of elements 
my @CS = ('geeks', 'for', 'geeks', 'articles'); 
              
# Assignment to a Scalar variable
my $x = @CS;         
      
# Assignment of a function 
# to a Scalar variable 
# Note: Time displayed here
# will be the GMT
my $y = localtime(); 
  
# Numerical operator creating
# Scalar Context
my $z = 3 + @CS;
              
# Displays number of elements
# in an Array
print "$x\n";     
  
# Displays time stored in array 
# in human readable format
print "$y\n";
  
# Displays sum of a number
# and Scalar
print "$z\n";
  
# Concatenation creating 
# Scalar Context
print "The number of elements are: " . @CS

chevron_right


Output:

4
Wed Mar 27 07:01:56 2019
7
The number of elements are: 4

 

Forcing Scalar Context

 
One must require to force Scalar Context when Perl presumes a List. So, in that case you can utilize scalar() function which generates Scalar Context as Perl is informed by this function to impart Scalar Context for its parameters.
Example:

filter_none

edit
close

play_arrow

link
brightness_4
code

#!/usr/bin/perl 
# Perl program of Forcing Scalar Context 
  
# array of elements 
my @x = ('geeks', 'for', 'geeks'); 
  
# Forcing Scalar context to display
# number of elements in an Array
print scalar @x;
print "\n";
  
# Displaying time in human readable 
# format by forcing Scalar Context
print scalar localtime();         

chevron_right


Output:

3
Sun Mar 17 06:12:53 2019

 

Arrays in Scalar Context

 
In order to provoke Scalar Context using an array, it is required to assign an array to a Scalar variable.
Example:

filter_none

edit
close

play_arrow

link
brightness_4
code

#!/usr/bin/perl 
# Perl program of Arrays in Scalar Context 
  
# array of elements 
my @x = ('geeks', 'for', 'geeks'); 
  
# Assignment of an Array to
# a Scalar variable
my $y @x;
  
# Displays number of elements in
# an Array
print $y;         

chevron_right


Output:

3

 

Use of if-statement in Scalar Context

 
When the condition section of the if-statement presumes a single value then that is Scalar Context. In the below program, if-statement contains array, in scalar context, array returns the number of elements in it. So, if the array is empty then it will return 0 hence, if-statement will not execute if the array passed to it as scalar context is empty.
Program 1:

filter_none

edit
close

play_arrow

link
brightness_4
code

#!/usr/bin/perl 
  
# Program of if-statement in Scalar Context 
use strict; 
use warnings; 
use 5.010; 
  
# Array with no elements
my @w = (); 
  
# Statement within 'if' will be executed 
# only if the array is not empty 
if (@w
    print "Geeks"

chevron_right


Output:

No Output

Here, nothing is printed as the stated Array is empty. So, the code does not displays the content of the if-statement.

Program 2:

filter_none

edit
close

play_arrow

link
brightness_4
code

#!/usr/bin/perl 
  
# Program of if-statement in Scalar Context 
use strict; 
use warnings; 
use 5.010; 
  
# An Array of elements
my @w = ('G', 'f', 'G'); 
  
# Statement within 'if' will be executed 
# only if the array is not empty 
if (@w
    print "There are some elements in the Array"

chevron_right


Output:

There are some elements in the Array

Here, the above stated Array is not empty so, the content of the if-statement is printed.
 

Reading in SCALAR Context

 
In order to place readline operator (i.e, <STDIN>) in Scalar Context it is required to designate this operator to a scalar variable.
Example:

filter_none

edit
close

play_arrow

link
brightness_4
code

#!/usr/bin/perl 
# Program to Read input from user
use strict; 
use 5.010; 
    
# Asking the user to provide input  
print "Enter your name:\n"
    
# Getting input from user  
my $y = <STDIN>; 
  
# Printing the required output 
print "My name is $y\n";

chevron_right


Output:

Above program accepts the input from the user with the use of <STDIN> and store it in the Scalar variable. Further, use that scalar variable to print the Input provided by the user.



My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.




Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.