Open In App

Perl | Scalar Context Sensitivity

Last Updated : 29 Mar, 2019
Improve
Improve
Like Article
Like
Save
Share
Report

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:




#!/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


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:




#!/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();         


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:




#!/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;         


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:




#!/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"


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:




#!/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"


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:




#!/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";


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.



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads