1. Perl
  2. Basic grammar

The Fastest Master of Perl Basic Syntax

This article is a summary of Perl's basic syntax to learn Perl quickly.

Perl Basic Syntax

Syntax Check

Be sure to write the following two lines first.

use strict;
use warnings;

use strict makes syntax check strict.

use warnings displays warnings to prevent mistakes.

print function

The print function prints a string to the standard output.

print "Hello world";

Comments

Perl's comment.

# comment

Variable Declarations

The my keyword declares a variable.

# Scalar variables
my $num;

# Array variables
my @students

# Hash variables
my %month_num;

Execution of Perl Programs

The perl command executes Perl programs.

perl script.pl

If you want to print the output to a file, you can use redirection.

perl script.pl > file.txt

These are executed on CUI envrinements, for example:

Compile check

You can do only compile check without runing the script.

perl -c script.pl

Perl Debugger

Perl has the debugger. To start the debugger, use -d option with the perl command.

perl -d script.pl

Numbers

Numbers

You can assign a number to a scalar variable. The number is a integral number or a floating point number.

my $num = 1;
my $num = 1.234;

If the digits is large, underscores can be used as delimiters.

my $num = 100_000_000;

Numbers written in source codes are called numeric literals.

Arithmetic Operations

These are basic arithmetic operations.

# Addition
$num = 1 + 1;

# Subtruction
$num = 1 - 1;

# Multiplication
$num = 1 * 2;

# Division
$num = 1 / 2;

To culcurate the quotient, perform division and then extract the integer part using the int function.

# Quotient
$quo = int(3 / 2);

The % operator calculates the remainder.

# Remainder
$mod = 3 % 2;

Increment and decrement

Increment and Decrement.

# Increment
$i++

# Decrement
$i--

Strings

Single Quoted Strings

This is a single quoted string. You can assign it to a scalar varialbe.

my $str1 = 'abc';

Double Quoted Strings

This is a double quoted string. You can assign it to a scalar varialbe. In double quoted strings, you can use escape sequences such as \t(tab), \n(line break) or etc.

my $str2 = "def";
my $str3 = "a\tbc\n";

You can also use variable expansions in double quoted strings.

# Variable expansion - The result is "abc def"
my $str4 = "$str1 def";

String Operators and Functions

Often used string operators and functions.

Examples:

# Concat two strings
my $join1 = 'aaa' . ' Bbb';

# Concat strings with a delimiter
my $join2 = join(',','aaa', 'bbb', 'ccc');

# Split
my @record = split(/,/, 'aaa,bbb,ccc');

# Length
my $length = length 'abcdef';

# Cut - The result is "ab"
my $substr = substr('abcd', 0, 2);

# Search - Returns the found position, otherwise returns -1
my $result = index('abcd', 'cd');

Arrays

Explains Perl arrays. Arrays are data structures to have multiple values.

Array Declarations

This is an array declaration and assignment. A list can be assigned to an array.

# Array declarations
my @array;

# Assignment to the array
@array = (1, 2, 3);

Getting and Setting an Element of the Array

Set and get an element of the array.

# Get an element of the array
$array[0];
$array[1];

# Set an element of the array
$array[0] = 1;
$array[1] = 2;

The Length of the Array

To get the length of the array, By evaluating the array in a scalar context, you can get the length of the array.

# Get the legnth of the array
my $array_length = @array;

Array Functions

Often used array functions.

# Cut off the first element
my $first = shift @array;

# Add an element at the beginning of the array
unshift @array, 5;

# Cut off the last element
my $last = pop @array;

# Add an element at the end of the array
push @array, 9;

Hashes

Explains Perl hashes. Hashes are data structures that have key-value pairs.

Hash Declarations

This is a hash declaration. A list can be assigned to a hash.

# Hash declaration
my %hash;

# Assignment values to the hash
%hash = (a => 1, b => 2);

Getting and Setting a Value of the Hash

Get and set a value of the hash.

# Get a value of the hash
$hash{a};
$hash{b};

# Set a value of the hash
$hash{a} = 5;
$hash{b} = 7;

If the key of the hash is not consists of "a-zA-Z0-9_", it must be enclosed in single or double quotes.

$hash{'some-key'} = 5;

Hash Functions

Often used hash functions.

# Get all keys
my @keys = keys %hash;

# Get all values
my @values = values %hash;

# Check if the key exists
exists $hash{a};

# Delete a key of the hash
delete $hash{a};

Conditional Branches

Explains conditional branches.

if Statements

For conditional branches, You can use if statements.

if ($condition) {
  # If the condition is ture, the statements in this block are executed.
}

if-else statement

This is a if-else statement.

if ($condition) {
  # If the condition is ture, the statements in this block are executed.
}
else {
  # If the condition is false, the statements in this block are executed.
}

if-elsif Statements

This is a if-elsif statement.

if ($condition1) {
  # If the condition 1 is ture, the statements in this block are executed.
}
elsif ($condition1) {
  # If the condition 2 is ture, the statements in this block are executed.
}

Comparison operator

The list of Perl comparison operators. Perl has numeric comparison operators and string comparison operators.

Numeric Comparison Operators

Numeric comparison compares the values as numbers.

$x == $y $x is equal to $y
$x != $y $x is not equal to $y
$x < $y $x is less than $y
$x > $y $x is greater than $y
$x <= $y $x is less than or equal to $y
$x >= $y $x is greater than or equal to $y

String Comparison Operators

String comparison operators compares the values as strings. The values are compared with the dictionary order.

$x eq $y $x is equal to $y
$x ne $y $x is not equal to $y
$x lt $y $x is less than $y
$x gt $y $x is greater than $y
$x le $y $x is less than or equal to $y
$x ge $y $x is greater than or equal to $y

Loop Syntax

Explains loop syntax such as while/for.

The while statement

This is a while statement.

my $i = 0;
while ($i < 5) {
    
    # Do something
    
    $i++;
}

The for statement

This is a for statement.

for (my $i = 0; $i < 5; $i++) {
  # Do something
}

The foreach statement

This is a foreach statement to iterate each element of the array.

foreach my $num (@nums) {
  # Do something
}

In Perl, the foreach statement is alias for the for statement.

# Same as the above foreach statement
for my $num (@nums) {
  # Do something
}

Subroutines

Explaines subroutines.

Subroutine Definition

This is a subroutine defintiion. A subroutine recieves the arguments, execute the statements, and return the return values.

sub sum {
  # Revices arguments
  my ($num1, $num2) = @_;
  
  # Execute the statements
  my $total = $num1 + $num2;
  
  # Return the return values
  return $total;
}

Calling Subroutines

Call a subroutine.

# Call a subroutine
my $sum = sum(1, 2);

File Input/Output

Explains file Input/Output.

# Open file
open my $fh, '<', $file
  or die "Cannot open'$file':$!";

while (my $line = <$fh>) {
  ...
}

close $fh;

The open function opens a file. The "<" means the read mode.

The <$fh> is a line input operator.

$! is a predefined variable to be set to the error that the operating system returns.

Often Used Features

Explains Perl often used features.

Perl True and False Values

Explains Perl true and false values.

False Values

These are false values in Perl.

  • undef
  • 0
  • ""
  • "0"
  • ()
True Values

True values are all values except for the above false values.

The defined Function

The defined function checks if the value is defined.

defined $num;

Command Line Arguments

@ARGV is command line arguments.

my ($args0, $args1, $args2) = @ARGV;

Scalar Context and List Context

Perl has context that the value is evaluated.

These are examples that the return values are different corresponding to scalar context and list context.

# Scalar context
my $time_str = localtime();

# List contex
my @datetime = localtime();

The unless Statement

Perl has the unless statement.

unless ($condition) {
  ...
}

The above unless statement is same as the following if statement.

if (!$condition) {
  ...
}

Postfix if, Postfix unless

Perl has the postfix if statement and the postfix unless statement.

# Postfix if
print $num if $num > 3;

# Postfix unless
die "error" unless $num;

Postfix for

Per has the postfix for statement.

# Postfix for
print $_ for @nums;

Each element of the array is assigned to $_.

$_ is called default variables

Array Slices and Hash Slices

Perl has array slices and hash slices syntax to get the specified elements.

# Array slice
my @select = @array[1, 4, 5];

# Hash slice
my @select = @hash{'a', 'b', 'd'};

The map Function

Perl has the map function to process each element of the array. Each element is assigned to $_.

my @mapped = map {$_ * 2} @array;

The above result of the map funtion is same as the result of the following for statement.

my @mapped;
for my $elem (@array) {
  my $new_elem = $elem * 2;
  push @mapped, $new_elem;
}

The grep function

Perl has the grep function to get the elements that the condition match. Each element is assigned to $_.

my @select = grep {$_ =~ /cat/} @array;

The above result of the grep function is same as the result of the following for statement.

my @select;
for my $elem (@array) {
  if ($elem =~ /cat/) {
    push @select, $elem;
  }
}

List Assignment

This is the syntax of list assignment.

# List assignment
my ($num1, $num2) = ($num3, $num4);

The Range Operator

The range operator creates a list that has a range of integers.

# Range operator
my @numes = (0 .. 5);

This is same as the following code.

my @numes = (0, 1, 2, 3, 4, 5);

The string list operator

Perl has the string list operator to create a string list easily.

# String list operator
my @strs = qw(aaa bbb ccc);

This is same as the following code.

my @strs = ('aaa', 'bbb',  'ccc');

Return Statments that has No Operand

The return statments that has no operand returns undef in scalar context, or returns an empty list in list context.

sub foo {
  
  return;
}

# undef
my $ret = foo();

# ()
my @ret = foo();

Exception Handling

The die function throws an exception.

# Throw an exception
die "Error message";

The eval block catch exceptions. If an exception occurs, the exception message is assinged to the predefined variable "$@".

# Catch exceptions
eval {
  # Do something
};

# The exception message
if ($@) {
  ...
}

Read Whole Content from a File

To read whole content from a file, you can use the following syntax.

# Read whole content from a file
my $content = do { local $/; <$fh> };

The Ternary Operator

Perl has Ternary operator.

# Ternary operator
my $num = $flag ? 1 : 2;

||=

Perl has special assign operator "||=".

$num ||= 2;

This is same as the following code.

$num = $num || 2;

//=

Perl has the defined-or operator and the special assign operator.

$num //= 2;

This is same as the following code.

$num = $num // 2;

Module Loading

The use function loads a module.

use SomeModule;

Write a configuration file in Perl

The do function read the configuration file written by Perl.

use FindBind;
my $conf_file = "$FindBin::Bin/app.conf";
my $conf = do $conf_file
  or die "Can't load config file \"$conf_file\":$! $@";

Examples of config file:

{
  name =>'Foo',
  number => 9
}

Multiple Line Comments

Although Perl has not the syntax of multiple line comments, You can use POD syntax to write multiple line comments.


=pod

Comment1

Comment2

Comment3

=cut

Related Informatrion