Variables

Variables are like containers which holds the data values. A variable specifies the name of the memory location.
In Perl, there is no need to explicitly declare variables to reserve memory space. When you assign a value to a variable, declaration happens automatically.

Naming convention

  • Perl variables are case-sensitive
  • Variables should consists of letters, numbers and underscore.
  • Variables length can be up to 255 characters.
  • Variable first letter must be a letter or underscore.

Syntax

$var-name =value; #scalar-variable
@arr-name = (values); #Array-variables
%hashes = (key-value pairs); # Hash-variables 

Example

$name = "OneCompiler"; #scalar-variable 
@arr-name = (values); #Array-variables
%hashes = (key-value pairs); # Hash-variables 

The above examples are valid variables, let us see some invalid variables in perl as below:

$1name = "1C" ; # invalid because variable starts with a number `1`
$first name = "foo"; # invalid because white space is present
$first-name = "foo"; # invalid because hypen(-) is present 

In some cases, there can be problems when you don't declare the variables explicitly.

$fruit = "mango";
print "I love $fruits"

Check result here

You might expect the output as I love mango but you might be surprised to see the output as I love without throwing any error. This is because fruit and fruits are two different variables and fruits is not assigned with any value. To avoid these king of mistakes while programming, Perl provides a pragma called strict which requires you to declare variable explicitly before using the variable is used. my is used to declare variables when you use strict.

The above example when you use strict

use strict;
my $fruit = "mango";
print "I love $fruits"

Check result here

Run the above program to find the difference.

my variable is lexically scoped which means variable is local to the enclosing block and can't be visible outside.

use warnings;
$where = 'outer';
print ("I'm " .$where. "\n");

if (where) {
  my $where = 'inner';
  print ("I'm " .$where. "\n");
}

print ("I'm " .$where. "\n");

Check result here