Skip to content
asicguru.tech@gmail.com
REGISTER LOGIN
AsicGuru Ventures
  • All Courses
  • CONTACT
  • GALLERY
  • HOME
  • Tutorials

0

Verilog Tutorial

17
  • Verilog Introduction
  • Lexical Tokens
  • Gate-Level Modelling
  • Data Types
  • Operators
  • Operands
  • Modules
  • Behavioral Modeling
  • Timing Controls
  • Procedures: Always and Initial Blocks
  • Functions
  • Tasks
  • Component Inference
  • Finite State Machines.
  • Compiler Directives
  • System Tasks and Functions
  • Test Benches

System Verilog

23
  • System Verilog Introduction
  • Data Types
  • Type Casting
  • Arrays
  • Associative Arrays
  • Dynamic Arrays
  • Queue
  • Operators
  • Procedural statements and Control flow
  • Classes
  • Inheritance
  • Encapsulation
  • This and Super operator
  • In-Line Constraints
  • Class Constraints
  • Virtual Classes
  • Parameterized Classes
  • Classes Summary
  • Singleton Classes
  • Functional Coverage Introduction
  • Covergroup
  • Tools
  • Books

Scripting

15
  • Introduction
  • Perl Tutorial
  • What is Perl
  • Perl: Syntax And Variable
  • Perl Strings
  • Perl Arrays
  • Perl Associative Arrays
  • If/While Syntax
  • File Input
  • Print Output
  • String Processing with Regular Expressions
  • Subroutines
  • Running External Programs
  • References
  • Terse Perl

Makefile

1
  • Makefile Tutorial
View Categories
  • Home
  • Tutorials
  • Scripting
  • Perl Arrays

Perl Arrays

6 min read

Arrays

Array constants are specified using parenthesis ( ) and the elements are separated with commas. Perl arrays are like lists or collections in other languages since they can grow and shrink, but in Perl they are just called “arrays”. Array variable names begin with the at-sign (@). Unlike C, the assignment operator (=) works for arrays — an independent copy of the array and its elements is made. Arrays may not contain other arrays as elements. Perl has sort of a “1-deep” mentality.

Actually, it’s possible to get around the 1-deep constraint using “references”, but it’s no fun.
Arrays work best if they just contain scalars (strings and numbers). The elements in an array do not all need to be the same type.
                                              
@array = (1, 2, “hello”);             ## a 3 element array
@empty = ();                          ## the array with 0 elements
$x = 1;
$y = 2;
@nums = ($x + $y, $x – $y);
## @nums is now (3, -1)


Just as in C, square brackets [ ] are used to refer to elements, so $a[6] is the element at index 6 in the array @a. As in C, array indexes start at 0. Notice that the syntax to access an element begins with ‘$’ not ‘@’ — use ‘@’ only when referring to the whole array.

(remember: all scalar expressions begin with $).
@array = (1, 2, “hello”, “there”);
$array[0] = $array[0] + $array[1];                    ## $array[0] is now 3

Perl arrays are not bounds checked. If code attempts to read an element outside the array size,
undef is returned. If code writes outside the array size, the array grows automatically to be big enough. Well written code probably should not rely on either of those features.


@array = (1, 2, “hello”, “there”);
$sum = $array[0] + $array[27];                  ## $sum is now 1, since $array[27]
returned undef
$array[99] = “the end”;                         ## array grows to be size 100


When used in a scalar context, an array evaluates to its length. The “scalar” operator will force the evaluation of something in a scalar context, so you can use scalar() to get the length of an array.
As an alternative to using scalar, the expression $#array is the index of the last element of the array which is always one less than the length.


@array = (1, 2, “hello”, “there”);
$len = @array;                            ## $len is now 4 (the length of @array)
$len = scalar(@array)                     ## same as above, since $len represented a
scalar
                                          ## context anyway, but this is more explicit
@letters = (“a”, “b”, “c”);
$i = $#letters;                           ## $i is now 2

That scalar(@array) is the way to refer to the length of an array is not a great moment in the history of readable code. At least I haven’t showed you the even more vulgar forms such as (0 +@a).
The sort operator (sort @a) returns a copy of the array sorted in ascending alphabetic order.
Note that sort does not change the original array. Here are some common ways to sort…

(sort @array)                                        ## sort alphabetically, with uppercase first
(sort {$a <=> $b} @array)                            ## sort numerically
(sort {$b cmp $a} @array)                            ## sort reverse alphabetically
(sort {lc($a) cmp lc($b)} @array)                    ## sort alphabetically, ignoring case
(somewhat inefficient)

The sort expression above pass a comparator function {…} to the sort operator, where the special variables $a and $b are the two elements to compare — cmp is the built-in string compare, and <=> is the built-in numeric compare.
There’s a variant of array assignment that is used sometimes to assign several variables at once. If an array on the left hand side of an assignment operation contains the names of variables, the variables are assigned the corresponding values from the right hand side.


($x, $y, $z) = (1, 2, “hello”, 4);
## assigns $x=1, $y=2, $z=”hello”, and the 4 is discarded

This type of assignment only works with scalars. If one of the values is an array, the wrong thing happens (see “flattening” below).

Array Add/Remove/Splice Functions


These handy operators will add or remove an element from an array. These operators change the array they operate on…
        Operating at the “front” ($array[0]) end of the array…
                shift(array) — returns the frontmost element and removes it from the array. Can be used in a loop to gradually remove and examine all the elements in an array left to right. The foreach operator, below, is another way to examine all the elements.
                unshift(array, elem) — inserts an element at the front of the array. Opposite of shift.
        Operating at the “back” ($array[$len-1]) end of the array…
                pop(array) — returns the endmost element (right hand side) and removes it from the array.
                push(array, elem) — adds a single element to the end of the array. Opposite of pop.
        splice(array, index, length, array2) — removes the section of the array defined by index and length, and replaces that section with the elements from array2. If array2 is omitted, splice() simply deletes. For example, to delete the element at index $i  from an array, use splice(@array, $i, 1).

Updated on May 4, 2025

What are your Feelings

  • Happy
  • Normal
  • Sad
Share This Article :
  • Facebook
  • X
  • LinkedIn
  • Pinterest
Perl StringsPerl Associative Arrays

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Archives

  • May 2025

Categories

  • Slider Post
  • Uncategorized

Copyright @ Asicguru Ventures by Misbah WP | Proudly powered by WordPress