SlideShare uma empresa Scribd logo
1 de 13
Baixar para ler offline
Perl Programming
                 Course
            References and nested
               data structures



Krassimir Berov

I-can.eu
Contents

1. What are references?
2. Reference types
3. Creating references
4. Using references
5. 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)
References
and nested data structures




Questions?

Mais conteúdo relacionado

Destaque

Things I Learned From Having Users
Things I Learned From Having UsersThings I Learned From Having Users
Things I Learned From Having Users
Dave Cross
 

Destaque (6)

Modern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl ProgrammerModern Perl for the Unfrozen Paleolithic Perl Programmer
Modern Perl for the Unfrozen Paleolithic Perl Programmer
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to Perl
 
Things I Learned From Having Users
Things I Learned From Having UsersThings I Learned From Having Users
Things I Learned From Having Users
 
Moo the universe and everything
Moo the universe and everythingMoo the universe and everything
Moo the universe and everything
 
Future of PERL in IT
Future of PERL in ITFuture of PERL in IT
Future of PERL in IT
 
Modern Perl Catch-Up
Modern Perl Catch-UpModern Perl Catch-Up
Modern Perl Catch-Up
 

Mais de Krasimir Berov (Красимир Беров)

Mais de Krasimir Berov (Красимир Беров) (8)

Хешове
ХешовеХешове
Хешове
 
Списъци и масиви
Списъци и масивиСписъци и масиви
Списъци и масиви
 
Network programming
Network programmingNetwork programming
Network programming
 
Processes and threads
Processes and threadsProcesses and threads
Processes and threads
 
Working with text, Regular expressions
Working with text, Regular expressionsWorking with text, Regular expressions
Working with text, Regular expressions
 
Subroutines
SubroutinesSubroutines
Subroutines
 
IO Streams, Files and Directories
IO Streams, Files and DirectoriesIO Streams, Files and Directories
IO Streams, Files and Directories
 
Syntax
SyntaxSyntax
Syntax
 

Último

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 

Último (20)

WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 

References and nested data structures

  • 1. Perl Programming Course References and nested data structures Krassimir Berov I-can.eu
  • 2. Contents 1. What are references? 2. Reference types 3. Creating references 4. Using references 5. Reference interpolation
  • 3. 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
  • 4. Reference types • Builtin types include: SCALAR ARRAY HASH CODE REF GLOB LVALUE FORMAT IO VSTRING Regexp
  • 5. Reference types • Most used: SCALAR – reference to scalar ARRAY – reference to array HASH – reference to hash CODE – reference to anonymous sub
  • 6. 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
  • 7. 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
  • 8. 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}
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. References and nested data structures • Resources • perlreftut • perllol • perldsc • perlref • Beginning Perl (Chapter 7 – References)
  • 13. References and nested data structures Questions?