SlideShare ist ein Scribd-Unternehmen logo
1 von 19
Program in Perl Style    Reference




             David Young
         yangboh@cn.ibm.com
              Feb. 2011
Program in Perl Style         Reference

Reference – the awesome reference
Program in Perl Style                                   Reference

What can we do with reference?
  Dispatch table
  Higher order functions




       In computer science, a dispatch table is a table of pointers to functions or
       methods. Use of such a table is a common technique when implementing
       late binding in object-oriented programming.
Program in Perl Style                      Reference

Dispatch table
# define your functions     # Push them   into hash table
                            %dispatch =   {
sub hellow {                   ”hellow”   => &hellow,
                               ”foo”      => $foo,
    print ”hellow world”;
                               “bar” =>   sub {
}                                           print ”bar foon”;
                                              },
                            }

$foo = sub {

    print ”foo world”;

}




                                          To be continued ...
Program in Perl Style                      Reference

Dispatch table - continued
  # dispatch tasks from your hash table
  $a = ”hellow”;
  &${dispatch->{$a}}();
  # hellow world
                                 # This is your hash table

  $rb = $dispatch->{”foo”};      %dispatch =   {
  &$rb();                           ”hellow”   => &hellow,
                                    ”foo”      => $foo,
  # foo world                       “bar” =>   sub {
                                                 print ”bar foon”;
                                                   },
  $rc = $dispatch->{”bar”};      }

  &$rc;
  # bar foo
Program in Perl Style                                  Reference

Reference – the awesome reference
  Dispatch table
  Higher order functions




   In mathematics and computer science, higher-order functions, functional forms, or
   functionals are functions which do at least one of the following:

     * take one or more functions as an input
     * output a function.
Program in Perl Style                        Reference

Higher Order Functions
sub category_defect {
    Local $_;           # just for a good habit
    my ( $column ) = @_;
    return sub {        # return a function instead a value
                my ( $condition, $line ) = @_;
                return $$line[ $column ] eq $condition ;
    }
}
Program in Perl Style                          Reference

Higher Order Functions
sub defect_by_category {
    local $_;
    my ($column, $col_value) = @_;
    my $category = &category_defect( $column ); # which return
    return sub {                                  # a function
                my (@result);
                my ($defect) = @_;
                return $defect       # invoke previous function
                      if &$category ($col_value, $defect) ;
    }
}
Program in Perl Style                       Reference

Higher Order Functions
sub defects_factory {
    local $_;
    my ($defect, @results);      # accept function as param
    my ($conditions, $defects ) = @_;
    foreach $defect ( @$defects ) {
    push @results, $defect if &$conditions ( $defect );
    }
    return @results;
}
Program in Perl Style                               Reference

Higher Order Functions
# $severity_1 holds a function reference, not a ordinary data

$severity_1 = &defect_by_category( SEVERITY, "1" );

$severity_2 = &defect_by_category( SEVERITY, "2" );

$severity_3 = &defect_by_category( SEVERITY, "3" );

$severity_4 = &defect_by_category( SEVERITY, "4" );



# transfer a function reference as parameter

@severity_1 = &defects_factory( $severity_1    , [ @defects ] );

@severity_2 = &defects_factory( $severity_2    , [ @defects ] );

@severity_3 = &defects_factory( $severity_3    , [ @defects ] );

@severity_4 = &defects_factory( $severity_4    , [ @defects ] );
Program in Perl Style Typeglobs

Typeglob is complex and dangures
Always be careful!!!
Program in Perl Style Typeglobs

Typeglobs and symble table
–– You'd better to read Camel book very carefully
 before start to using it.
 $spud   = "Wow!";

 @spud   = ("idaho", "russet");

 *potato = *spud;    # Alias potato to spud using typeglob assignment

 print "$potaton"; # prints "Wow!"

 print @potato, "n"; # prints "idaho russet"
Program in Perl Style Typeglobs

It is NOT the pointer you would expect in C
although they look similar literally
 $b = 10;

 {

     local *b;   # Save *b's values

     *b = *a;    # Alias b to a

     $b = 20;    # Same as modifying $a instead

 }               # *b restored at end of block

 print $a;       # prints "20"

 print $b;       # prints "10"
Program in Perl Style Typeglobs

Efficient parameter passing
  @array = (10,20);

  DoubleEachEntry(*array); # @array and @copy are identical.

  print "@array n"; # prints 20 40



  sub DoubleEachEntry {

      # $_[0] contains *array

      local *copy = shift;   # Create a local alias

      foreach $element (@copy) {

          $element *= 2;

      }

  }
Program in Perl Style Typeglobs

 Passing Filehandles to Subroutines
   Filehandle can not be passed to subroutines as scalars
   The only way to it is through typeglobs


   open (F, "/tmp/sesame") || die $!;
   read_and_print(*F);


   sub read_and_print {      # Filehandle G
       local (*G) = @_;      # is the same as filehandle F
       while (<G>) { print; }
   }
Program in Perl Style Typeglobs

Typeglobs are not always so explicitely
  cat test.pl
  #!/usr/bin/perl                          Be very careful!!!
  $foo = 123;
                                     Implicit typeglobs will make
  $bar = 321;
                                     your code very hard to
  $ra = "foo";
  print "$ra = $$ra n";                   understand
  while ($rb = <STDIN>) {
      chomp($rb);
      print "$rb = $$rb n";
  }                            bash-4.1$ echo "bar" | perl test2.pl
                               foo = 123
                               bar = 321
Program in Perl Style Typeglobs

But anyway ---- It's powerful!!!
Program in Perl Style Typeglobs

You can even build dispatch table from a plain file
cat a.cfg                    while ($a = <>) {

h say_hellow_to_a_friend         chomp($a);

                                 ($key, $func) = split ” ”, $a;
a accept_an_invitation
                                 $disptch{$key} = $func;
c confirm_an_invition
                             }
e send_email_to_a_friend
r refuse_an_invitation       sub command {

                             my ($cmd, arg) = @_;

Suppose you have functions   $rcmd = $disptch->{$cmd};

in above names               &$rcmd($arg) if defined &$rcmd;

                             }


                             &command("h", ”Tom”);
Program in Perl Style

Say good-bye to your endless ...
switch ...
case ...
if elsif ...
etc.
So think again why there is no 'switch',
  'case' ... in Perl?
Maybe you don't actually need it.

Weitere ähnliche Inhalte

Was ist angesagt?

Introduction to Perl - Day 2
Introduction to Perl - Day 2Introduction to Perl - Day 2
Introduction to Perl - Day 2Dave Cross
 
LPW: Beginners Perl
LPW: Beginners PerlLPW: Beginners Perl
LPW: Beginners PerlDave Cross
 
Anonymous Functions in PHP 5.3 - Matthew Weier O’Phinney
Anonymous Functions in PHP 5.3 - Matthew Weier O’PhinneyAnonymous Functions in PHP 5.3 - Matthew Weier O’Phinney
Anonymous Functions in PHP 5.3 - Matthew Weier O’PhinneyHipot Studio
 
Class 3 - PHP Functions
Class 3 - PHP FunctionsClass 3 - PHP Functions
Class 3 - PHP FunctionsAhmed Swilam
 
Neatly Hashing a Tree: FP tree-fold in Perl5 & Perl6
Neatly Hashing a Tree: FP tree-fold in Perl5 & Perl6Neatly Hashing a Tree: FP tree-fold in Perl5 & Perl6
Neatly Hashing a Tree: FP tree-fold in Perl5 & Perl6Workhorse Computing
 
PHP Unit 3 functions_in_php_2
PHP Unit 3 functions_in_php_2PHP Unit 3 functions_in_php_2
PHP Unit 3 functions_in_php_2Kumar
 
02 - Second meetup
02 - Second meetup02 - Second meetup
02 - Second meetupEdiPHP
 
Advanced Perl Techniques
Advanced Perl TechniquesAdvanced Perl Techniques
Advanced Perl TechniquesDave Cross
 
Perl 5.10 for People Who Aren't Totally Insane
Perl 5.10 for People Who Aren't Totally InsanePerl 5.10 for People Who Aren't Totally Insane
Perl 5.10 for People Who Aren't Totally InsaneRicardo Signes
 
php 2 Function creating, calling, PHP built-in function
php 2 Function creating, calling,PHP built-in functionphp 2 Function creating, calling,PHP built-in function
php 2 Function creating, calling, PHP built-in functiontumetr1
 
PHP 5.3 Overview
PHP 5.3 OverviewPHP 5.3 Overview
PHP 5.3 Overviewjsmith92
 

Was ist angesagt? (20)

Introduction to Perl - Day 2
Introduction to Perl - Day 2Introduction to Perl - Day 2
Introduction to Perl - Day 2
 
LPW: Beginners Perl
LPW: Beginners PerlLPW: Beginners Perl
LPW: Beginners Perl
 
Anonymous Functions in PHP 5.3 - Matthew Weier O’Phinney
Anonymous Functions in PHP 5.3 - Matthew Weier O’PhinneyAnonymous Functions in PHP 5.3 - Matthew Weier O’Phinney
Anonymous Functions in PHP 5.3 - Matthew Weier O’Phinney
 
Perl Presentation
Perl PresentationPerl Presentation
Perl Presentation
 
Php
PhpPhp
Php
 
Licão 13 functions
Licão 13 functionsLicão 13 functions
Licão 13 functions
 
Perl
PerlPerl
Perl
 
Class 3 - PHP Functions
Class 3 - PHP FunctionsClass 3 - PHP Functions
Class 3 - PHP Functions
 
Neatly Hashing a Tree: FP tree-fold in Perl5 & Perl6
Neatly Hashing a Tree: FP tree-fold in Perl5 & Perl6Neatly Hashing a Tree: FP tree-fold in Perl5 & Perl6
Neatly Hashing a Tree: FP tree-fold in Perl5 & Perl6
 
Introduction to Perl and BioPerl
Introduction to Perl and BioPerlIntroduction to Perl and BioPerl
Introduction to Perl and BioPerl
 
Introduction in php
Introduction in phpIntroduction in php
Introduction in php
 
PHP Unit 3 functions_in_php_2
PHP Unit 3 functions_in_php_2PHP Unit 3 functions_in_php_2
PHP Unit 3 functions_in_php_2
 
02 - Second meetup
02 - Second meetup02 - Second meetup
02 - Second meetup
 
Advanced Perl Techniques
Advanced Perl TechniquesAdvanced Perl Techniques
Advanced Perl Techniques
 
Perl 5.10 for People Who Aren't Totally Insane
Perl 5.10 for People Who Aren't Totally InsanePerl 5.10 for People Who Aren't Totally Insane
Perl 5.10 for People Who Aren't Totally Insane
 
Ruby 2.0
Ruby 2.0Ruby 2.0
Ruby 2.0
 
php 2 Function creating, calling, PHP built-in function
php 2 Function creating, calling,PHP built-in functionphp 2 Function creating, calling,PHP built-in function
php 2 Function creating, calling, PHP built-in function
 
Perl Scripting
Perl ScriptingPerl Scripting
Perl Scripting
 
Perl Basics with Examples
Perl Basics with ExamplesPerl Basics with Examples
Perl Basics with Examples
 
PHP 5.3 Overview
PHP 5.3 OverviewPHP 5.3 Overview
PHP 5.3 Overview
 

Ähnlich wie Perl Style Reference - Dispatch Tables, Higher Order Functions & Typeglobs

Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Kang-min Liu
 
BSDM with BASH: Command Interpolation
BSDM with BASH: Command InterpolationBSDM with BASH: Command Interpolation
BSDM with BASH: Command InterpolationWorkhorse Computing
 
What's New in Perl? v5.10 - v5.16
What's New in Perl?  v5.10 - v5.16What's New in Perl?  v5.10 - v5.16
What's New in Perl? v5.10 - v5.16Ricardo Signes
 
Perl Bag of Tricks - Baltimore Perl mongers
Perl Bag of Tricks  -  Baltimore Perl mongersPerl Bag of Tricks  -  Baltimore Perl mongers
Perl Bag of Tricks - Baltimore Perl mongersbrian d foy
 
You Can Do It! Start Using Perl to Handle Your Voyager Needs
You Can Do It! Start Using Perl to Handle Your Voyager NeedsYou Can Do It! Start Using Perl to Handle Your Voyager Needs
You Can Do It! Start Using Perl to Handle Your Voyager NeedsRoy Zimmer
 
Tutorial perl programming basic eng ver
Tutorial perl programming basic eng verTutorial perl programming basic eng ver
Tutorial perl programming basic eng verQrembiezs Intruder
 
Beginning Perl
Beginning PerlBeginning Perl
Beginning PerlDave Cross
 
Good Evils In Perl
Good Evils In PerlGood Evils In Perl
Good Evils In PerlKang-min Liu
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to PerlDave Cross
 
Whatsnew in-perl
Whatsnew in-perlWhatsnew in-perl
Whatsnew in-perldaoswald
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to Perlworr1244
 

Ähnlich wie Perl Style Reference - Dispatch Tables, Higher Order Functions & Typeglobs (20)

Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)Good Evils In Perl (Yapc Asia)
Good Evils In Perl (Yapc Asia)
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to Perl
 
Lecture19-20
Lecture19-20Lecture19-20
Lecture19-20
 
Lecture19-20
Lecture19-20Lecture19-20
Lecture19-20
 
BSDM with BASH: Command Interpolation
BSDM with BASH: Command InterpolationBSDM with BASH: Command Interpolation
BSDM with BASH: Command Interpolation
 
What's New in Perl? v5.10 - v5.16
What's New in Perl?  v5.10 - v5.16What's New in Perl?  v5.10 - v5.16
What's New in Perl? v5.10 - v5.16
 
Perl Bag of Tricks - Baltimore Perl mongers
Perl Bag of Tricks  -  Baltimore Perl mongersPerl Bag of Tricks  -  Baltimore Perl mongers
Perl Bag of Tricks - Baltimore Perl mongers
 
You Can Do It! Start Using Perl to Handle Your Voyager Needs
You Can Do It! Start Using Perl to Handle Your Voyager NeedsYou Can Do It! Start Using Perl to Handle Your Voyager Needs
You Can Do It! Start Using Perl to Handle Your Voyager Needs
 
Cleancode
CleancodeCleancode
Cleancode
 
Tutorial perl programming basic eng ver
Tutorial perl programming basic eng verTutorial perl programming basic eng ver
Tutorial perl programming basic eng ver
 
Beginning Perl
Beginning PerlBeginning Perl
Beginning Perl
 
First steps in PERL
First steps in PERLFirst steps in PERL
First steps in PERL
 
Good Evils In Perl
Good Evils In PerlGood Evils In Perl
Good Evils In Perl
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to Perl
 
php AND MYSQL _ppt.pdf
php AND MYSQL _ppt.pdfphp AND MYSQL _ppt.pdf
php AND MYSQL _ppt.pdf
 
Php Tutorials for Beginners
Php Tutorials for BeginnersPhp Tutorials for Beginners
Php Tutorials for Beginners
 
Perl bhargav
Perl bhargavPerl bhargav
Perl bhargav
 
Whatsnew in-perl
Whatsnew in-perlWhatsnew in-perl
Whatsnew in-perl
 
Introduction to Perl
Introduction to PerlIntroduction to Perl
Introduction to Perl
 
Web 8 | Introduction to PHP
Web 8 | Introduction to PHPWeb 8 | Introduction to PHP
Web 8 | Introduction to PHP
 

Kürzlich hochgeladen

Class 11th Physics NEET formula sheet pdf
Class 11th Physics NEET formula sheet pdfClass 11th Physics NEET formula sheet pdf
Class 11th Physics NEET formula sheet pdfAyushMahapatra5
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdfQucHHunhnh
 
Disha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfDisha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfchloefrazer622
 
Arihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfArihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfchloefrazer622
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdfQucHHunhnh
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactdawncurless
 
social pharmacy d-pharm 1st year by Pragati K. Mahajan
social pharmacy d-pharm 1st year by Pragati K. Mahajansocial pharmacy d-pharm 1st year by Pragati K. Mahajan
social pharmacy d-pharm 1st year by Pragati K. Mahajanpragatimahajan3
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfciinovamais
 
The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13Steve Thomason
 
Student login on Anyboli platform.helpin
Student login on Anyboli platform.helpinStudent login on Anyboli platform.helpin
Student login on Anyboli platform.helpinRaunakKeshri1
 
Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingTechSoup
 
APM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAPM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAssociation for Project Management
 
9548086042 for call girls in Indira Nagar with room service
9548086042  for call girls in Indira Nagar  with room service9548086042  for call girls in Indira Nagar  with room service
9548086042 for call girls in Indira Nagar with room servicediscovermytutordmt
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfAdmir Softic
 
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in DelhiRussian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhikauryashika82
 
General AI for Medical Educators April 2024
General AI for Medical Educators April 2024General AI for Medical Educators April 2024
General AI for Medical Educators April 2024Janet Corral
 
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfWeb & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfJayanti Pande
 
Interactive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationInteractive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationnomboosow
 
Q4-W6-Restating Informational Text Grade 3
Q4-W6-Restating Informational Text Grade 3Q4-W6-Restating Informational Text Grade 3
Q4-W6-Restating Informational Text Grade 3JemimahLaneBuaron
 

Kürzlich hochgeladen (20)

Class 11th Physics NEET formula sheet pdf
Class 11th Physics NEET formula sheet pdfClass 11th Physics NEET formula sheet pdf
Class 11th Physics NEET formula sheet pdf
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
 
Disha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfDisha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdf
 
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Mattingly "AI & Prompt Design: The Basics of Prompt Design"Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
 
Arihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfArihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdf
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdf
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impact
 
social pharmacy d-pharm 1st year by Pragati K. Mahajan
social pharmacy d-pharm 1st year by Pragati K. Mahajansocial pharmacy d-pharm 1st year by Pragati K. Mahajan
social pharmacy d-pharm 1st year by Pragati K. Mahajan
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
 
The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13The Most Excellent Way | 1 Corinthians 13
The Most Excellent Way | 1 Corinthians 13
 
Student login on Anyboli platform.helpin
Student login on Anyboli platform.helpinStudent login on Anyboli platform.helpin
Student login on Anyboli platform.helpin
 
Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy Consulting
 
APM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAPM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across Sectors
 
9548086042 for call girls in Indira Nagar with room service
9548086042  for call girls in Indira Nagar  with room service9548086042  for call girls in Indira Nagar  with room service
9548086042 for call girls in Indira Nagar with room service
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdf
 
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in DelhiRussian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
Russian Escort Service in Delhi 11k Hotel Foreigner Russian Call Girls in Delhi
 
General AI for Medical Educators April 2024
General AI for Medical Educators April 2024General AI for Medical Educators April 2024
General AI for Medical Educators April 2024
 
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfWeb & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdf
 
Interactive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationInteractive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communication
 
Q4-W6-Restating Informational Text Grade 3
Q4-W6-Restating Informational Text Grade 3Q4-W6-Restating Informational Text Grade 3
Q4-W6-Restating Informational Text Grade 3
 

Perl Style Reference - Dispatch Tables, Higher Order Functions & Typeglobs

  • 1. Program in Perl Style Reference David Young yangboh@cn.ibm.com Feb. 2011
  • 2. Program in Perl Style Reference Reference – the awesome reference
  • 3. Program in Perl Style Reference What can we do with reference? Dispatch table Higher order functions In computer science, a dispatch table is a table of pointers to functions or methods. Use of such a table is a common technique when implementing late binding in object-oriented programming.
  • 4. Program in Perl Style Reference Dispatch table # define your functions # Push them into hash table %dispatch = { sub hellow { ”hellow” => &hellow, ”foo” => $foo, print ”hellow world”; “bar” => sub { } print ”bar foon”; }, } $foo = sub { print ”foo world”; } To be continued ...
  • 5. Program in Perl Style Reference Dispatch table - continued # dispatch tasks from your hash table $a = ”hellow”; &${dispatch->{$a}}(); # hellow world # This is your hash table $rb = $dispatch->{”foo”}; %dispatch = { &$rb(); ”hellow” => &hellow, ”foo” => $foo, # foo world “bar” => sub { print ”bar foon”; }, $rc = $dispatch->{”bar”}; } &$rc; # bar foo
  • 6. Program in Perl Style Reference Reference – the awesome reference Dispatch table Higher order functions In mathematics and computer science, higher-order functions, functional forms, or functionals are functions which do at least one of the following: * take one or more functions as an input * output a function.
  • 7. Program in Perl Style Reference Higher Order Functions sub category_defect { Local $_; # just for a good habit my ( $column ) = @_; return sub { # return a function instead a value my ( $condition, $line ) = @_; return $$line[ $column ] eq $condition ; } }
  • 8. Program in Perl Style Reference Higher Order Functions sub defect_by_category { local $_; my ($column, $col_value) = @_; my $category = &category_defect( $column ); # which return return sub { # a function my (@result); my ($defect) = @_; return $defect # invoke previous function if &$category ($col_value, $defect) ; } }
  • 9. Program in Perl Style Reference Higher Order Functions sub defects_factory { local $_; my ($defect, @results); # accept function as param my ($conditions, $defects ) = @_; foreach $defect ( @$defects ) { push @results, $defect if &$conditions ( $defect ); } return @results; }
  • 10. Program in Perl Style Reference Higher Order Functions # $severity_1 holds a function reference, not a ordinary data $severity_1 = &defect_by_category( SEVERITY, "1" ); $severity_2 = &defect_by_category( SEVERITY, "2" ); $severity_3 = &defect_by_category( SEVERITY, "3" ); $severity_4 = &defect_by_category( SEVERITY, "4" ); # transfer a function reference as parameter @severity_1 = &defects_factory( $severity_1 , [ @defects ] ); @severity_2 = &defects_factory( $severity_2 , [ @defects ] ); @severity_3 = &defects_factory( $severity_3 , [ @defects ] ); @severity_4 = &defects_factory( $severity_4 , [ @defects ] );
  • 11. Program in Perl Style Typeglobs Typeglob is complex and dangures Always be careful!!!
  • 12. Program in Perl Style Typeglobs Typeglobs and symble table –– You'd better to read Camel book very carefully before start to using it. $spud = "Wow!"; @spud = ("idaho", "russet"); *potato = *spud; # Alias potato to spud using typeglob assignment print "$potaton"; # prints "Wow!" print @potato, "n"; # prints "idaho russet"
  • 13. Program in Perl Style Typeglobs It is NOT the pointer you would expect in C although they look similar literally $b = 10; { local *b; # Save *b's values *b = *a; # Alias b to a $b = 20; # Same as modifying $a instead } # *b restored at end of block print $a; # prints "20" print $b; # prints "10"
  • 14. Program in Perl Style Typeglobs Efficient parameter passing @array = (10,20); DoubleEachEntry(*array); # @array and @copy are identical. print "@array n"; # prints 20 40 sub DoubleEachEntry { # $_[0] contains *array local *copy = shift; # Create a local alias foreach $element (@copy) { $element *= 2; } }
  • 15. Program in Perl Style Typeglobs Passing Filehandles to Subroutines Filehandle can not be passed to subroutines as scalars The only way to it is through typeglobs open (F, "/tmp/sesame") || die $!; read_and_print(*F); sub read_and_print { # Filehandle G local (*G) = @_; # is the same as filehandle F while (<G>) { print; } }
  • 16. Program in Perl Style Typeglobs Typeglobs are not always so explicitely cat test.pl #!/usr/bin/perl Be very careful!!! $foo = 123; Implicit typeglobs will make $bar = 321; your code very hard to $ra = "foo"; print "$ra = $$ra n"; understand while ($rb = <STDIN>) { chomp($rb); print "$rb = $$rb n"; } bash-4.1$ echo "bar" | perl test2.pl foo = 123 bar = 321
  • 17. Program in Perl Style Typeglobs But anyway ---- It's powerful!!!
  • 18. Program in Perl Style Typeglobs You can even build dispatch table from a plain file cat a.cfg while ($a = <>) { h say_hellow_to_a_friend chomp($a); ($key, $func) = split ” ”, $a; a accept_an_invitation $disptch{$key} = $func; c confirm_an_invition } e send_email_to_a_friend r refuse_an_invitation sub command { my ($cmd, arg) = @_; Suppose you have functions $rcmd = $disptch->{$cmd}; in above names &$rcmd($arg) if defined &$rcmd; } &command("h", ”Tom”);
  • 19. Program in Perl Style Say good-bye to your endless ... switch ... case ... if elsif ... etc. So think again why there is no 'switch', 'case' ... in Perl? Maybe you don't actually need it.