Home Scripting Perl Tutorial Arrays
Main Menu
Home
System Verilog
Verilog
Methodologies
Open Vera
Digital Concepts
Verification Basics
Protocols
Scripting
    - Perl Tutorial
        -- Perl Definition
        -- Syntax & Variables
        -- strings
        -- Arrays
        -- Associative Arrays
        -- If & While Loop
        -- File Input
        -- Print Output
        -- Strings and Regular Expressions
        -- Subroutines
        -- Running External Programs
        -- References
        -- Terse Perl
    - Bash
    - Makefile Tutorial
    - Perl Examples
    - Bash Examples
Articles
Videos
Interview Questions
Computer Architechture
C and C++
Blog/Article
AsicGuru Blog
Tags Cloud
Ads
Usefull Sites
Know Your IP/Location
Local Information India
Buy Car/Inverter Batteries
Real Estate India
Sports Accessories India
Perl Arrays
Share This Articale:

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).

This Articles is written/submitted by puneet (Puneet Aggarwal). You can also contribute to Asicguru.com. Click here to start


Prev << strings

Next >> Associative Arrays

 
Login/Register
Register
Sign In
Login with :-
gmail-yahoo-twitter-facebook
| | |  
  •  
  • Bookmark
    ADS