SlideShare a Scribd company logo
1 of 67
Download to read offline
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
use strict;
                #
                my $add = sub { $_[0] + $_[1] };

                #
                $add->(3, 4);
                # => 7



                use strict;

                sub add {
                   $_[0] + $_[1];
                }

                add(2,4);


2011   2   19
use strict;
                my $c = 3
                my $add = sub { $_[0] +   $c};

                $add->(4);
                # => 7




2011   2   19
use strict;
                my $c = 3
                my $proc = sub { $c++ };

                $proc->();
                # 3
                $proc->();
                # 4
                $proc->();
                # 5




2011   2   19
use strict;

                sub add {
                   $_[0] + $_[1];
                }

                my $func = ¥&add;
                $func->(3, 4);
                # => 7




2011   2   19
use strict;
                #
                sub generate {
                    my ($a, $b) = @_;
                    sub { $a + $b };
                }

                generate(3, 4)->();
                # => 7




2011   2   19
use strict;
                use feature qw(say);

                #
                sub generate {
                    my ($num) = @_;
                    sub { $num++ };
                }

                my $fun = generate(2);

                say $fun->();    # => 2
                say $fun->();    # => 3

                my $fun2 = generate(2);

                say $fun2->();    # => 2
                say $fun2->();    # => 3


2011   2   19
2011   2   19
2011   2   19
use strict;

                sub each_line {
                   my ($file, $proc) = @_;
                   open my $fh “<$file” or return;
                   while(my $line = <$fh>) {
                       $proc->($line);
                   }
                   close($fh);
                }

                each_line(‘aaa.txt’, sub { print $_[0] } );




2011   2   19
use strict;

                sub each_line (&@) {
                   my ($proc, $file) = @_;
                   open my $fh, "<$file" or return;
                   while(my $line = <$fh>) {
                       $proc->($line);
                   }
                   close($fh);
                }

                each_line { print $_[0]; } ('lex.pl') ;




2011   2   19
2011   2   19
use strict;

                my $table = {
                    ‘left’ => sub { print ‘left’ },
                    ‘right’ => sub { print ‘right’ },
                };
                sub dispatch {
                   my ($mode) = @_;
                   my $func = $table->{$mode};
                   $func && $func->();
                }
                dispatch(‘left’);




2011   2   19
2011   2   19
use strict;
                use Log::Dispatch;

                my $logger = Log::Dispatch->new;
                sub generate_logger {
                  my ($ip) = @_;
                  sub { $logger->info(“$ip : $_[0]“) };
                }

                $custom_logger = generate_logger
                (‘192.168.1.1’);

                $custom_logger->(“msssssg”)
                # => “192.168.1.1 : msssssssg”



2011   2   19
sub patial_add {
                    my ($a) = @_;

                    sub { add( $a + $_[0] ) };
                }

                sub add {
                    $_[0] + $_[1];
                }

                my $func = patial_add(2);
                $func->(5);
                # => 7




2011   2   19
2011   2   19
use strict;

                package Collection;
                sub new {
                   my $class = shift;
                   bless {data => @_}, $class;
                }
                sub iter {
                   my $self = shift;
                   my $counter = 0;
                   sub { $self->{data}[$counter++] };
                }

                package main;
                my $iter = Collection->new(1, 2)->iter;
                say $iter->(); # => 1
                say $iter->(); # => 2


2011   2   19
2011   2   19
use strict;
                use feature qw(say);

                # 1 ..
                my $infinite_list
                  = sub { my $c = 1; sub { $c++; } };

                #              100
                my $num_list = $infinite_list->();
                for my $i (0..100) {
                   say $num_list->();
                }




2011   2   19
2011   2   19
2011   2   19
my $var = 12;

                sub func {
                  say $var;
                }

                sub test {
                  my $var = 19;
                  func();
                }

                test(); # => 12
                func(); # => 12




2011   2   19
local $var = 12;

                sub func {
                  say $var;
                }

                sub test {
                  local $var = 19;
                  func();
                }

                test(); # => 19
                func(); # => 12




2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19
2011   2   19

More Related Content

Viewers also liked

テーマ「最適化」
テーマ「最適化」テーマ「最適化」
テーマ「最適化」technocat
 
Google trends to_irc
Google trends to_ircGoogle trends to_irc
Google trends to_ircrarere
 
PHPカンファレンス北海道_20160416
PHPカンファレンス北海道_20160416PHPカンファレンス北海道_20160416
PHPカンファレンス北海道_20160416Yoshihiro Sasaki
 
Plack::Request with Encoding
Plack::Request with EncodingPlack::Request with Encoding
Plack::Request with Encodingmoznion
 
Games::* - Perlで 「ゲーム」しよう #hokkaidopm
Games::* - Perlで 「ゲーム」しよう #hokkaidopmGames::* - Perlで 「ゲーム」しよう #hokkaidopm
Games::* - Perlで 「ゲーム」しよう #hokkaidopm鉄次 尾形
 
これからのPerlプロダクトのかたち(YAPC::Asia 2013)
これからのPerlプロダクトのかたち(YAPC::Asia 2013)これからのPerlプロダクトのかたち(YAPC::Asia 2013)
これからのPerlプロダクトのかたち(YAPC::Asia 2013)goccy
 
CPAN/便利モジュール
CPAN/便利モジュールCPAN/便利モジュール
CPAN/便利モジュールYoshihiro Sasaki
 
変数、リファレンス
変数、リファレンス変数、リファレンス
変数、リファレンスcharsbar
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミングlestrrat
 
仮設ネットカフェ
仮設ネットカフェ仮設ネットカフェ
仮設ネットカフェAkiko Iwakiri
 
エロサイト管理者の憂鬱3 - Hokkaiodo.pm#4 -
エロサイト管理者の憂鬱3 - Hokkaiodo.pm#4 -エロサイト管理者の憂鬱3 - Hokkaiodo.pm#4 -
エロサイト管理者の憂鬱3 - Hokkaiodo.pm#4 -Yusuke Wada
 
Yet Another Perl Cooking
Yet Another Perl CookingYet Another Perl Cooking
Yet Another Perl Cookingmoznion
 
Hokkaido pm 8 LT
Hokkaido pm 8 LTHokkaido pm 8 LT
Hokkaido pm 8 LTmoznion
 
Separate Model from Catalyst
Separate Model from CatalystSeparate Model from Catalyst
Separate Model from Catalysttechmemo
 
Net stalking with-lastfm
Net stalking with-lastfmNet stalking with-lastfm
Net stalking with-lastfmmoznion
 

Viewers also liked (20)

テーマ「最適化」
テーマ「最適化」テーマ「最適化」
テーマ「最適化」
 
Google trends to_irc
Google trends to_ircGoogle trends to_irc
Google trends to_irc
 
Use Carton
Use CartonUse Carton
Use Carton
 
Currying in perl
Currying in perlCurrying in perl
Currying in perl
 
PHPカンファレンス北海道_20160416
PHPカンファレンス北海道_20160416PHPカンファレンス北海道_20160416
PHPカンファレンス北海道_20160416
 
Plack::Request with Encoding
Plack::Request with EncodingPlack::Request with Encoding
Plack::Request with Encoding
 
YAPC::AsiaとHokkaido.pm
YAPC::AsiaとHokkaido.pmYAPC::AsiaとHokkaido.pm
YAPC::AsiaとHokkaido.pm
 
Games::* - Perlで 「ゲーム」しよう #hokkaidopm
Games::* - Perlで 「ゲーム」しよう #hokkaidopmGames::* - Perlで 「ゲーム」しよう #hokkaidopm
Games::* - Perlで 「ゲーム」しよう #hokkaidopm
 
これからのPerlプロダクトのかたち(YAPC::Asia 2013)
これからのPerlプロダクトのかたち(YAPC::Asia 2013)これからのPerlプロダクトのかたち(YAPC::Asia 2013)
これからのPerlプロダクトのかたち(YAPC::Asia 2013)
 
CPAN/便利モジュール
CPAN/便利モジュールCPAN/便利モジュール
CPAN/便利モジュール
 
変数、リファレンス
変数、リファレンス変数、リファレンス
変数、リファレンス
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミング
 
cpanfile
cpanfilecpanfile
cpanfile
 
仮設ネットカフェ
仮設ネットカフェ仮設ネットカフェ
仮設ネットカフェ
 
エロサイト管理者の憂鬱3 - Hokkaiodo.pm#4 -
エロサイト管理者の憂鬱3 - Hokkaiodo.pm#4 -エロサイト管理者の憂鬱3 - Hokkaiodo.pm#4 -
エロサイト管理者の憂鬱3 - Hokkaiodo.pm#4 -
 
Yet Another Perl Cooking
Yet Another Perl CookingYet Another Perl Cooking
Yet Another Perl Cooking
 
Hokkaido pm 8 LT
Hokkaido pm 8 LTHokkaido pm 8 LT
Hokkaido pm 8 LT
 
Separate Model from Catalyst
Separate Model from CatalystSeparate Model from Catalyst
Separate Model from Catalyst
 
Net stalking with-lastfm
Net stalking with-lastfmNet stalking with-lastfm
Net stalking with-lastfm
 
Hokkaido.pmの未来
Hokkaido.pmの未来Hokkaido.pmの未来
Hokkaido.pmの未来
 

Higher order perl

  • 1. 2011 2 19
  • 2. 2011 2 19
  • 3. 2011 2 19
  • 4. 2011 2 19
  • 5. 2011 2 19
  • 6. 2011 2 19
  • 7. 2011 2 19
  • 8. 2011 2 19
  • 9. 2011 2 19
  • 10. 2011 2 19
  • 11. 2011 2 19
  • 12. 2011 2 19
  • 13. 2011 2 19
  • 14. 2011 2 19
  • 15. 2011 2 19
  • 16. 2011 2 19
  • 17. 2011 2 19
  • 18. 2011 2 19
  • 19. 2011 2 19
  • 20. 2011 2 19
  • 21. 2011 2 19
  • 22. 2011 2 19
  • 23. 2011 2 19
  • 24. 2011 2 19
  • 25. 2011 2 19
  • 26. 2011 2 19
  • 27. 2011 2 19
  • 28. 2011 2 19
  • 29. 2011 2 19
  • 30. 2011 2 19
  • 31. 2011 2 19
  • 32. 2011 2 19
  • 33. 2011 2 19
  • 34. use strict; # my $add = sub { $_[0] + $_[1] }; # $add->(3, 4); # => 7 use strict; sub add { $_[0] + $_[1]; } add(2,4); 2011 2 19
  • 35. use strict; my $c = 3 my $add = sub { $_[0] + $c}; $add->(4); # => 7 2011 2 19
  • 36. use strict; my $c = 3 my $proc = sub { $c++ }; $proc->(); # 3 $proc->(); # 4 $proc->(); # 5 2011 2 19
  • 37. use strict; sub add { $_[0] + $_[1]; } my $func = ¥&add; $func->(3, 4); # => 7 2011 2 19
  • 38. use strict; # sub generate { my ($a, $b) = @_; sub { $a + $b }; } generate(3, 4)->(); # => 7 2011 2 19
  • 39. use strict; use feature qw(say); # sub generate { my ($num) = @_; sub { $num++ }; } my $fun = generate(2); say $fun->(); # => 2 say $fun->(); # => 3 my $fun2 = generate(2); say $fun2->(); # => 2 say $fun2->(); # => 3 2011 2 19
  • 40. 2011 2 19
  • 41. 2011 2 19
  • 42. use strict; sub each_line { my ($file, $proc) = @_; open my $fh “<$file” or return; while(my $line = <$fh>) { $proc->($line); } close($fh); } each_line(‘aaa.txt’, sub { print $_[0] } ); 2011 2 19
  • 43. use strict; sub each_line (&@) { my ($proc, $file) = @_; open my $fh, "<$file" or return; while(my $line = <$fh>) { $proc->($line); } close($fh); } each_line { print $_[0]; } ('lex.pl') ; 2011 2 19
  • 44. 2011 2 19
  • 45. use strict; my $table = { ‘left’ => sub { print ‘left’ }, ‘right’ => sub { print ‘right’ }, }; sub dispatch { my ($mode) = @_; my $func = $table->{$mode}; $func && $func->(); } dispatch(‘left’); 2011 2 19
  • 46. 2011 2 19
  • 47. use strict; use Log::Dispatch; my $logger = Log::Dispatch->new; sub generate_logger { my ($ip) = @_; sub { $logger->info(“$ip : $_[0]“) }; } $custom_logger = generate_logger (‘192.168.1.1’); $custom_logger->(“msssssg”) # => “192.168.1.1 : msssssssg” 2011 2 19
  • 48. sub patial_add { my ($a) = @_; sub { add( $a + $_[0] ) }; } sub add { $_[0] + $_[1]; } my $func = patial_add(2); $func->(5); # => 7 2011 2 19
  • 49. 2011 2 19
  • 50. use strict; package Collection; sub new { my $class = shift; bless {data => @_}, $class; } sub iter { my $self = shift; my $counter = 0; sub { $self->{data}[$counter++] }; } package main; my $iter = Collection->new(1, 2)->iter; say $iter->(); # => 1 say $iter->(); # => 2 2011 2 19
  • 51. 2011 2 19
  • 52. use strict; use feature qw(say); # 1 .. my $infinite_list = sub { my $c = 1; sub { $c++; } }; # 100 my $num_list = $infinite_list->(); for my $i (0..100) { say $num_list->(); } 2011 2 19
  • 53. 2011 2 19
  • 54. 2011 2 19
  • 55. my $var = 12; sub func { say $var; } sub test { my $var = 19; func(); } test(); # => 12 func(); # => 12 2011 2 19
  • 56. local $var = 12; sub func { say $var; } sub test { local $var = 19; func(); } test(); # => 19 func(); # => 12 2011 2 19
  • 57. 2011 2 19
  • 58. 2011 2 19
  • 59. 2011 2 19
  • 60. 2011 2 19
  • 61. 2011 2 19
  • 62. 2011 2 19
  • 63. 2011 2 19
  • 64. 2011 2 19
  • 65. 2011 2 19
  • 66. 2011 2 19
  • 67. 2011 2 19