References and nested data structures
Upcoming SlideShare
Loading in...5
×
 

References and nested data structures

on

  • 500 views

This is the eighth set of slightly updated slides from a Perl programming course that I held some years ago. ...

This is the eighth set of slightly updated slides from a Perl programming course that I held some years ago.
I want to share it with everyone looking for intransitive Perl-knowledge.
A table of content for all presentations can be found at i-can.eu.
The source code for the examples and the presentations in ODP format are on https://github.com/kberov/PerlProgrammingCourse

Statistics

Views

Total Views
500
Views on SlideShare
500
Embed Views
0

Actions

Likes
0
Downloads
3
Comments
0

0 Embeds 0

No embeds

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

References and nested data structures References and nested data structures Presentation Transcript

  • Perl Programming Course References and nested data structuresKrassimir BerovI-can.eu
  • Contents1. What are references?2. Reference types3. Creating references4. Using references5. Reference interpolation
  • What are references?• A piece of data that tells us the location of another piece of data• A reference is a scalar value that refers to an array or a hash (or to just about anything else).• References are the way to implement complicated data structures in Perl• References are like pointers that know what they point to
  • Reference types• Builtin types include: SCALAR ARRAY HASH CODE REF GLOB LVALUE FORMAT IO VSTRING Regexp
  • Reference types• Most used: SCALAR – reference to scalar ARRAY – reference to array HASH – reference to hash CODE – reference to anonymous sub
  • Creating references• Just two ways to make a reference 1. By putting a in front of a variable $aref = @array; # $aref - reference to @array $href = %hash; # $href - reference to %hash $sref = $scalar; # $sref - reference to $scalar 2. [ITEMS] makes a new, anonymous array, {ITEMS} makes a new, anonymous hash $aref = [ 1, "foo", undef, 13 ]; # $aref now holds a reference to an array $href = { APR => 4, AUG => 8 }; # $href now holds a reference to a hash
  • Using references• Just two ways to use references 1. Use curly braces preceded with the sigil of the variable you refer to @{$aref}; # An array reverse @{$aref}; # Reverse the array ${$aref}[3]; # An element of the array ${$aref}[3] = 17; # Assigning an element %{$href}; # A hash keys %{$href}; # Get the keys from the hash ${$href}{red} # An element of the hash ${$href}{red} = 17; # Assigning an element
  • Using references (2)• Just two ways to use references 2. Use the arrow operator to access elements ● In between two subscripts, the arrow is optional. @$aref; # An array reverse @$aref; # Reverse the array $aref->[3]; # An element of the array $aref->[3] = 17; # Assigning an element $aref->[0]->[2] can be written as $aref->[0][2] %$href; # A hash keys %$href; # Get the keys from the hash $href->{red} # An element of the hash $href->{red} = 17; # Assigning an element $href->{green}->{leaf} can be written as $href->{green}{leaf}
  • Using references• Example: my $self = { name =>Krassi, family_name => Berov, children =>[qw|Maria Pavel Viktoria|], favorite_things =>{ } }; print "Hello! I am $self->{name} $self->{family_name}" print I have . scalar @{$self->{children}} . children.; print They are named: . map {$_ . "n"} @{$self->{children}}; #see using.pl for more
  • Using references• Example: my $self = { name =>Krassi, family_name => Berov, children =>[qw|Maria Pavel Viktoria|], favorite_things =>{ } }; print "Hello! I am $self->{name} $self->{family_name}" print I have . scalar @{$self->{children}} . children.; print They are named: . map {$_ . "n"} @{$self->{children}}; #see using.pl for more
  • Reference interpolation• Example: my @pets = qw|Goldy Amelia Jako|; my $self = { name =>Krassi, family_name => Berov, can => sub { return shift }, pets => @pets, children =>[qw|Maria Pavel Victoria|], }; print <<TXT; Hello! I am $self->{name} $self->{family_name}. I can ${$self->{can}(talk)}. My first child is $self->{children}[0]. My last child is $self->{children}[-1]. I do not have a pet named $self->{pets}[1]. TXT
  • References and nested data structures• Resources • perlreftut • perllol • perldsc • perlref • Beginning Perl (Chapter 7 – References)
  • Referencesand nested data structuresQuestions?