Slide 1

Slide 1 text

ࠓ೥ॻ͍ͨ 1FSMͷίʔυͷৼΓฦΓ )PLLBJEPQN !BLJZN

Slide 2

Slide 2 text

NF w !BLJZN w w TFDDBNQ ZBQDBTJB w 4&$$0/ࡳຈେձ༏উ

Slide 3

Slide 3 text

DUGLBUTVEPOPSH

Slide 4

Slide 4 text

$1"/HJUIVC

Slide 5

Slide 5 text

$1"/ w "OZ&WFOU4,,4FSW w $PDPB/FUXPSL$IBOHF w 3FHFYQ7FSCBM&YQSFTTJPOT

Slide 6

Slide 6 text

$1"/ w "OZ&WFOU4,,4FSW w $PDPB/FUXPSL$IBOHF w 3FHFYQ7FSCBM&YQSFTTJPOT

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

ϑλΛดͯ͡ˠ։͘ͷ8J'JͷεΠονΛ ར༻ͯ͠ࠂന͞ΕΔ

Slide 9

Slide 9 text

Slide 10

Slide 10 text

(JUIVC w .BD,FZCPBSE-&% $PDPB%JDUJPOBSZ4FSWJDFT Q6OB[V$IBO $PDPB(VJ5FTU "OZ&WFOU-FBQ.PUJPO "NPO8FC%JTQBUDIFS%7 5FYU1JDP5FNQMBUF 888'$7JEFP%PXOMPBE (BNFT1JDSPTT 5FYU$IJOFTF/VNFSBMT+" *SPI

Slide 11

Slide 11 text

લճͷ)PLLBJEPQN Ͱ࿩͠·ͨ͠

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

Slide 14

Slide 14 text

$PDPBNPEVMF

Slide 15

Slide 15 text

w ͳͥ$PDPBϞδϡʔϧΛॻ͘ͷ͔ʁ w $PDPB"1*Λ৮Γ͍͔ͨΒ w 1FSMͰ.BDΞϓϦ͡Όͳͯ͘ɺ.BDͷػೳʹ ΞΫηε͍͚ͨͩͩ͠͠ɺ୯ମϞδϡʔϧʹ͠ ͍ͯͬͨ΄͏͕ΈΜͳ͕޾ͤ w ͱUZQFTUFS͞Μ͕ݴ͍ͬͯͨ BHSFF

Slide 16

Slide 16 text

$PDPBNPEVMFͷ ࡞Γํ

Slide 17

Slide 17 text

w ࠷ۙ w 946#Ͱॻ͚ΔΑ͏ʹͳͬͨͷͰ௒ઈศར w ֵ໋ w $PDPB(SPXM΍$PDPB4LZQF͸໘౗ͳ͜ͱΛ ͍ͯ͠Δ w YTVCQQ͕ੜ੒͢ΔDΛखͰॻ͘Α͏ͳ͜ͱ

Slide 18

Slide 18 text

NJOJMOFX w .JOJMMBͰ࡞੒͢Δ w ANJOJMOFXQ94.PEVMFA w CVJMEFS.Z#VJMEFSQNΛ࡞੒ w IUUQTPIIBUFOBCMPHDPNFOUSZ

Slide 19

Slide 19 text

CVJMEFS.Z#VJMEFSQN package builder::MyBuilder; use strict; use warnings; use parent qw(Module::Build); use File::Copy; ! sub new { my ($self, %args) = @_; $self->SUPER::new( %args, extra_compiler_flags => ['-Wall'], extra_linker_flags => ['-framework', 'Foundation'], ); } GSBNFXPSLͷϦϯΫ

Slide 20

Slide 20 text

CVJMEFS.Z#VJMEFSQN sub compile_c { my ($self, $file, %args) = @_; ! (my $m_file = $file) =~ s/\.c$/.m/; move($file, $m_file) or die $!; ! $self->SUPER::compile_c($m_file, %args); } ! 1;

Slide 21

Slide 21 text

NJOJMUPNM [build] build_class = "builder::MyBuilder"

Slide 22

Slide 22 text

w YTʹΰϦΰϦͱॻ͍͍ͯ͘ w NBLF͢ΔͱN͕ੜ੒͞ΕΔ w HJUJHOPSFʹlib/Foo.mͷΑ͏ʹ௥Ճ͓ͯ͘͠

Slide 23

Slide 23 text

w ී௨ͷ94ͱಉ͡Α͏ʹॻ͚·͢ w $PDPBˠ1FSM 1FSMˠ$PDPBͷσʔλͷม׵ ʹؾΛ͚ͭΕ͹͍͍͚ͩͰ͢ w ͦΕҎ֎͸ͨͩͷ94 w Ͳ͏΍Ε͹͍͍Μͩʜͱ͍͏ͱ͖ʹ͸ w UZQFTUFS͞Μ΍TPI͞ΜͷSFQPTJUPSZΛ
 ࢀߟʹ͢Δ

Slide 24

Slide 24 text

σʔλͷม׵ w IUUQXXXTMJEFTIBSFOFUUZQFTUFSIBDLJOHNBDPTYDPDPBBQJGSPN QFSM w IUUQTHJUIVCDPNTPI$PDPB/4%JTUSJCVUFE/PUJpDBUJPO$FOUFS CMPCNBTUFSOT@EJTUSJCVUFE@OPUJpDBUJPO@DFOUFSN • nsnumber_to_sv(), ns_to_sv()

Slide 25

Slide 25 text

σʔλͷม׵ # e.g. NSString → SVPV ! SV* sv = sv_2mortal(newSV(0)); sv_setpv(sv, [str UTF8String]);

Slide 26

Slide 26 text

Ͱ

Slide 27

Slide 27 text

.BD,FZCPBSE-&% w ͱ͍͏ϞδϡʔϧΛ࡞Γ·ͨ͠ w IUUQHPPHMFNBDCMPHTQPUKQ NBOJQVMBUJOHLFZCPBSEMFETUISPVHIIUNM w ͜ΕΛͦͷ··࣋ͬͯ͘Δ͜ͱʹ w ͳͷͰɺઆ໌͢Δ͜ͱ͕͋Γ·ͤΜ

Slide 28

Slide 28 text

HJUIVCDPNBLJZN.BD,FZCPBSE-&%

Slide 29

Slide 29 text

JTTVF w .JOJMMBͰ%FWFM"TTFSU04తͳ͜ͱΛ͍ͨ͠ w CVJMEFS.Z#VJMEFSQNIBDL • die 'OS unsupported' unless ($^O eq 'darwin');

Slide 30

Slide 30 text

Slide 31

Slide 31 text

QFSM

Slide 32

Slide 32 text

MBUFTUSFMFBTF QFSM

Slide 33

Slide 33 text

QFSMEFMUBΛோΊΔ

Slide 34

Slide 34 text

IBTITMJDFTZOUBY w %hash{…} %array[...] w LFZWBMVF JOEFYWBMVF ͷϦετΛฦ͠·͢ w ͍͚ͯΔ

Slide 35

Slide 35 text

IBTITMJDFTZOUBY my %h = ( blonk => 2, foo => 3, squink => 5, bar => 8, ); my %subset = %h{qw/foo bar/}; # => (foo => 3, bar => 8)

Slide 36

Slide 36 text

IBTITMJDFTZOUBY my @a = "a".."z"; my @list = %a[3,4,6]; # => (3, "d", 4, "e", 6, "g")

Slide 37

Slide 37 text

QPTUpYEFSFGFSFODJOH w ޙஔσϦϑΝϨϯε w !BˠB! w ෳࡶͳσʔλߏ଄Λૢ࡞͢Δͱ͖ʹศར w TMJDFͱ૊Έ߹ΘͤΔ͜ͱ͕Ͱ͖Δ

Slide 38

Slide 38 text

QPTUpYEFSFGFSFODJOH no warnings 'experimental::postderef'; use feature qw/postderef/; ! my $r = [1, 2, 3]; my @a = @$r; my @b = $r->@*;

Slide 39

Slide 39 text

σʔλߏ଄ my $foo = { bar => { baz => { a => 1, b => 2, c => 3, } } }; !

Slide 40

Slide 40 text

σʔλߏ଄ my $foo = { bar => { baz => { a => 1, b => 2, c => 3, } } }; ! my @ab = @{$foo->{bar}{baz}}{qw/a b/}; # => [1, 2] ஍ࠈͬΆ͍

Slide 41

Slide 41 text

σʔλߏ଄ my $foo = { bar => { baz => { a => 1, b => 2, c => 3, } } }; ! my @ab = $foo->{bar}{baz}->@{qw/a b/}; # => [1, 2]

Slide 42

Slide 42 text

:PV5VCF%BUB"1* $VAR1 = { 'fmt' => '36', 'fmt_list' => [ '36', '18', '5', '43', '17' ], 'resolution' => '320x240', 'suffix' => 'flv', 'title' => 'HE-MAN HEYEAYEA SONG FOR 10 HOURS', 'user' => undef, 'video_id' => 'eh7lp9umG2I', 'video_url' => ..., 'video_url_map' => { '17' => { 'fmt' => '17', 'resolution' => '176x144', 'suffix' => '3gp', 'url' => ... }, '18' => { 'fmt' => '18', 'resolution' => '320x240',

Slide 43

Slide 43 text

ࠓ·Ͱ # video_url_mapから各フォーマットのデータを # ひっぱってくる ! my @data = @{$data->{video_url_map}}{@{$data->{fmt_list}}};

Slide 44

Slide 44 text

# video_url_mapから各フォーマットのデータを # ひっぱってくる ! my @data = @{$data->{video_url_map}}{@{$data->{fmt_list}}}; ࠓ·Ͱ

Slide 45

Slide 45 text

QPTUEFSFG # video_url_mapから各フォーマットのデータを # ひっぱってくる ! my @data = $data->{video_url_map}->@{$data->{fmt_list}->@*};

Slide 46

Slide 46 text

w QSPUPUZQFBUUSJCVUF w sub foo($$){}ˠsub foo : prototype($$){} w Perl 5.19.2から $!が decodeされる w http://d.hatena.ne.jp/syohex/ 20131227/1388149250

Slide 47

Slide 47 text

1FSM2VJ[

Slide 48

Slide 48 text

͜ͷίʔυ͸ಈ͘ʁ # メモリは十分にあるとする # perl-5.18.1 (64bit) ! my @a; $a[2**31] = 1; ! # =>

Slide 49

Slide 49 text

͜ͷίʔυ͸ಈ͘ʁ # メモリは十分にあるとする # perl-5.18.1 (64bit) ! my @a; $a[2**31] = 1; ! # => Modification of non-creatable array value attempted, subscript -2147483648 ಈ͔ͳ͍

Slide 50

Slide 50 text

QFSMҎ߱ͳΒ my @a; $a[2**31] = 1; ! # On 64-bit platforms, the internal array functions now use 64-bit offsets, allowing Perl arrays to hold more than 2**31 elements, if you have the memory available.

Slide 51

Slide 51 text

EFQSFDBUJPOT w $(*QN w ΍ͬͱ ɾТɾʆ

Slide 52

Slide 52 text

w .PEVMF1MVHHBCMF w 0CKFDU"DDFTTPS w 1PE-B5F9 w 5FSN6* w 5FYU4PVOEFY SFNPWFENPEVMFT w "SDIJWF&YUSBDU w #-JOU w $1"/1-64 w 'JMF$IFDL5SFF w -PH.FTTBHF

Slide 53

Slide 53 text

·ͱΊ w ͪΐͬͱͨ͠$PDPBNPEVMFͷ࡞Γํ w QFSM w IBTITMJDFTZOUBY QPTUpYEFSFGFSFODJOH