Perl Tips

April 6, 2012, Tags: perl

Basic

my @myarray = ();
push @myarray,"a";
my @keys = qw(a b c);
my @vals = (1, 2, 3);
my %hash;
@hash{@keys} = @vals;

Loop

# loop elements in itemArray1 and itemArray2
foreach my $item (@itemArray1, @itemArray2) {
  ...
}

while ( my ($key, $value) = each(%hash) ) {
  print "$key => $value\n";
}

Sub

sub prepare_sth {
  my $param = shift;  # means shift @_, @_ is param array
  # my $param = $_;   # when could use $_ ??
}
sub uniq {
  @list = shift;
  %seen = ();
  @uniqu = grep { ! $seen{$_} ++ } @list;
}

Data Structure

AoA

from book

### Assign a list of array references to an array.
@AoA = (
         [ "fred", "barney" ],
         [ "george", "jane", "elroy" ],
         [ "homer", "marge", "bart" ],
);
print $AoA[2][1];   # prints "marge"

### Create an reference to an array of array references.
$ref_to_AoA = [
    [ "fred", "barney", "pebbles", "bamm bamm", "dino", ],
    [ "homer", "bart", "marge", "maggie", ],
    [ "george", "jane", "elroy", "judy", ],
];

print $ref_to_AoA->[2][3];   # prints "judy"

Remember that there is an implied -> between every pair of adjacent braces or brackets. (Simply saying, -> indicates a reference which created via []).

Therefore these two lines:

$AoA[2][3]
$ref_to_AoA->[2][3]

are equivalent to these two lines:

$AoA[2]->[3]
$ref_to_AoA->[2]->[3]

References