ITNW 2310 - PERL
Allan Kochis,Adjunct Professor - CIT

Arrays


  1. Split and Join
    Split splits up a string by some delimiter (whitespace by default) and returns and array.
    Join is the inverse of split, it joins the elements of an array into a single string with a delimiter.
    PerlOutput
    #!/usr/bin/perl -w
    
    $string=`date`;
    chomp($string);
    
    print "String ".$string."\n\n";
    
    @array=split(/ /,$string);
    
    print @array." elements \n\n";
    for($i=0; $i < @array ; $i++) {
       print "element $i = $array[$i] \n";
    }
    print "\n";
    $string=join(":",@array);
    print "String ".$string."\n\n";
    
    @array=split(/:/,$string);
    
    print @array." elements \n\n";
    for($i=0; $i < @array ; $i++) {
       print "element $i = $array[$i] \n";
    }
    

    String Wed Sep 14 08:20:05 CST 2005
    
    6 elements
    
    element 0 = Wed
    element 1 = Sep
    element 2 = 14
    element 3 = 08:20:05
    element 4 = CST
    element 5 = 2005
    
    String Wed:Sep:14:08:20:05:CST:2005
    
    8 elements
    
    element 0 = Wed
    element 1 = Sep
    element 2 = 14
    element 3 = 08
    element 4 = 20
    element 5 = 05
    element 6 = CST
    element 7 = 2005
    

  2. Splice
    splice(array, offset, length, list);
    PerlOutput
    #!/usr/bin/perl -w
    
    $string=`date`;
    chomp($string);
    
    print "String ".$string."\n\n";
    
    @array=split(/ /,$string);
    
    print @array." elements \n\n";
    for($i=0; $i < @array ; $i++) {
       print "element $i = $array[$i] \n";
    }
    print "\n";
    
    splice(@array,2,2,01,02,03,04);
    
    
    print @array." elements \n\n";
    for($i=0; $i < @array ; $i++) {
       print "element $i = $array[$i] \n";
    }
    print "\n";
    
    splice(@array,2,2);
    
    print @array." elements \n\n";
    for($i=0; $i < @array ; $i++) {
       print "element $i = $array[$i] \n";
    }
    print "\n";
    
    splice(@array,2);
    
    print @array." elements \n\n";
    for($i=0; $i < @array ; $i++) {
       print "element $i = $array[$i] \n";
    }
    print "\n";
    

    String Wed Sep 14 08:31:48 CST 2005
    
    6 elements
    
    element 0 = Wed
    element 1 = Sep
    element 2 = 14
    element 3 = 08:31:48
    element 4 = CST
    element 5 = 2005
    
    8 elements
    
    element 0 = Wed
    element 1 = Sep
    element 2 = 1
    element 3 = 2
    element 4 = 3
    element 5 = 4
    element 6 = CST
    element 7 = 2005
    
    6 elements
    
    element 0 = Wed
    element 1 = Sep
    element 2 = 3
    element 3 = 4
    element 4 = CST
    element 5 = 2005
    
    2 elements
    
    element 0 = Wed
    element 1 = Sep
    
    

  3. Sort
    PerlOutput
    #!/usr/bin/perl -w
    
    
    for($i=0; $i <10; $i++) {
       $array[$i]=rand()*10;
    }
    
    print @array." elements \n\n";
    for($i=0; $i < @array ; $i++) {
       print "element $i = $array[$i] \n";
    }
    print "\n";
    
    @array=sort(@array);
    
    print @array." elements \n\n";
    for($i=0; $i < @array ; $i++) {
       print "element $i = $array[$i] \n";
    }
    print "\n";
    

    10 elements
    
    element 0 = 3.06604555183188
    element 1 = 4.58620085005776
    element 2 = 8.27025464308587
    element 3 = 4.53334868742736
    element 4 = 5.73902871122375
    element 5 = 0.411092748254163
    element 6 = 8.20418054374695
    element 7 = 8.30017465673414
    element 8 = 3.8698673689797
    element 9 = 0.356841239270125
    
    10 elements
    
    element 0 = 0.356841239270125
    element 1 = 0.411092748254163
    element 2 = 3.06604555183188
    element 3 = 3.8698673689797
    element 4 = 4.53334868742736
    element 5 = 4.58620085005776
    element 6 = 5.73902871122375
    element 7 = 8.20418054374695
    element 8 = 8.27025464308587
    element 9 = 8.30017465673414
    
    

  4. map
    PerlOutput
    #!/usr/bin/perl -w
    
    
    for($i=0; $i <10; $i++) {
       $array[$i]=$i;
    }
    
    print @array." elements \n\n";
    for($i=0; $i < @array ; $i++) {
       print "element $i = $array[$i] \n";
    }
    print "\n";
    
    @array=map {$_+=4 } @array;
    
    print @array." elements \n\n";
    for($i=0; $i < @array ; $i++) {
       print "element $i = $array[$i] \n";
    }
    print "\n";
    

    10 elements
    
    element 0 = 0
    element 1 = 1
    element 2 = 2
    element 3 = 3
    element 4 = 4
    element 5 = 5
    element 6 = 6
    element 7 = 7
    element 8 = 8
    element 9 = 9
    
    10 elements
    
    element 0 = 4
    element 1 = 5
    element 2 = 6
    element 3 = 7
    element 4 = 8
    element 5 = 9
    element 6 = 10
    element 7 = 11
    element 8 = 12
    element 9 = 13
    
    

  5. Assignment 2 the perly way
    PerlOutput
    #!/usr/bin/perl
    
    $string="0123456789";
    @a=split(//,$string);
    @ord=map ord,@a;
    @left=map {$_>>4} @ord;
    @right=map {$_&0x0F} @ord;
    
    print join(//,@a)."\n";
    print join(//,@left)."\n";
    print join(//,@right)."\n";
    

    0111213141516171819
    3131313131313131313
    0111213141516171819
    

  6. A 2 dimension like array (Very Cish)
    PerlOutput
    #!/usr/bin/perl -w
    #
    #
    sub map  {
    #
    #  given a row and column create a single subscript
    #
      my $x = $_[0];
      my $y = $_[1];
      my $z;
    
      $z=$x*$columns +$y;
      return $z;
    }
    
    $rows=8;
    $columns=8;
    $#array=$rows * $columns;
    
    for $row ( 0 .. $rows-1) {
       for $col ( 0 .. $columns-1) {
            $array[&map($row,$col)]= ($row+1) * ($col+1);
       }
    }
    
    for $row ( 0 .. $rows-1)  {
         for $col ( 0 .. $columns-1 ) {
             printf("%3d ", $array[&map($row,$col)]);
         }
         print "\n";
    }
    

      1   2   3   4   5   6   7   8 
      2   4   6   8  10  12  14  16 
      3   6   9  12  15  18  21  24 
      4   8  12  16  20  24  28  32 
      5  10  15  20  25  30  35  40 
      6  12  18  24  30  36  42  48 
      7  14  21  28  35  42  49  56 
      8  16  24  32  40  48  56  64 
    

  7. Pascal's Triangle
    PerlOutput
    #!/usr/bin/perl -w
    #
    #
    sub map  {
    #
    #  given a row and column create a single subscript
    #
      my $x = $_[0];
      my $y = $_[1];
      my $z;
    
      $z=($x*($x+1))/2+$y;
      return $z;
    }
    
    $rows=10;
    $#tri=($rows*($rows +1))/2;
    
    for $row ( 0 .. $rows-1) {
       for $col ( 0 .. $row) {
            if($col == 0 || $col == $row) {
                $tri[&map($row,$col)]=1;
            } else {
                $tri[&map($row,$col)]=$tri[&map($row-1,$col-1)] +
                                      $tri[&map($row-1,$col)]; 
            }  
       }
    }
    
    for $row ( 0 .. $rows-1)  {
         $line="";
         for $col ( 0 .. $row ) {
            $line.=sprintf("%d ", $tri[&map($row,$col)]);
         }
         $blanks=(80 -(length $line))/2;
         print " " x $blanks,$line,"\n";
    }
    

                                           1 
                                          1 1 
                                         1 2 1 
                                        1 3 3 1 
                                       1 4 6 4 1 
                                     1 5 10 10 5 1 
                                   1 6 15 20 15 6 1 
                                  1 7 21 35 35 21 7 1 
                                1 8 28 56 70 56 28 8 1 
                              1 9 36 84 126 126 84 36 9 1 
    

© Allan Kochis Last revision 9/14/2005