Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
p5-Lodash! 吉祥寺.pm14 / LT @k y8
Slide 2
Slide 2 text
_.defaults({ 'a': 1 }, { 'a': 3, 'b': 2 }); // → { 'a': 1, 'b': 2 } _.partition([1, 2, 3, 4], n => n % 2); // → [[1, 3], [2, 4]]
Slide 3
Slide 3 text
p5-Lodash Perl5 port of Lodash.js 同じ挙動を目指してる ( ひとまず) 手書き Inline module に頼るでなく、 真正面から モチベー ション JSer に楽してもらいたい CPAN に便利なモジュー ルがたくさんあるけ ど、 知らないが為に損することもある
Slide 4
Slide 4 text
use Lodash; _->defaults({ a => 1 }, { a => 3, b => 2 }); # → { a => 1, b => 2 } _->partition([1, 2, 3, 4], sub ($n) { $n % 2 }); # → [[1, 3], [2, 4]]
Slide 5
Slide 5 text
use Lodash qw(_defaults _partition); _defaults({ a => 1 }, { a => 3, b => 2 }); # → { a => 1, b => 2 } _partition([1, 2, 3, 4], sub ($n) { $n % 2 }); # → [[1, 3], [2, 4]]
Slide 6
Slide 6 text
use Lodash -core; # => export core functions
Slide 7
Slide 7 text
_.add
Slide 8
Slide 8 text
6 + 4
Slide 9
Slide 9 text
❯ perl -e 'print 6 + 4' 10 ❯ node -e 'console.log(6+4)' 10
Slide 10
Slide 10 text
'6' + '4'
Slide 11
Slide 11 text
❯ perl -e "print '6' + '4'" 10 ❯ node -e "console.log('6'+'4')" 64
Slide 12
Slide 12 text
_.add(6, 4) # => 10 _.add('6', '4') # => '64'
Slide 13
Slide 13 text
❯ perl -MDevel::Peek -e "Dump 6" SV = IV(0x7fdf7d011370) at 0x7fdf7d011380 REFCNT = 1 FLAGS = (IOK,READONLY,PROTECT,pIOK) IV = 6
Slide 14
Slide 14 text
❯ perl -MDevel::Peek -e "Dump '6'" SV = PV(0x7fb986803e80) at 0x7fb98700a998 REFCNT = 1 FLAGS = (POK,IsCOW,READONLY,PROTECT,pPOK) PV = 0x7fb986500b70 "6"\0 CUR = 1 LEN = 10 COW_REFCNT = 0
Slide 15
Slide 15 text
どちらも Scalar Value だけど、 中身は違う 一方は、 Integer Value もう一方は Pointer Value 6 と '6' の中身の違いを浮き出せれば、 区別できる
Slide 16
Slide 16 text
use B;
Slide 17
Slide 17 text
use Test::More; use B; ok B::svref_2object(\6)->FLAGS & B::SVp_IOK; ok not B::svref_2object(\'6')->FLAGS & B::SVp_IOK; done_testing;
Slide 18
Slide 18 text
No content
Slide 19
Slide 19 text
XOR operator
Slide 20
Slide 20 text
use Test::More; ok((6^6) eq '0'); ok not (('6'^'6') eq '0'); done_testing;
Slide 21
Slide 21 text
use Test::More; # NUL ok not ((6^6) eq "\0"); ok(('6'^'6') eq "\0"); done_testing;
Slide 22
Slide 22 text
sub is_number { my $value = shift; looks_like_number($value) && ($value^$value) eq '0' }
Slide 23
Slide 23 text
No content
Slide 24
Slide 24 text
!!1
Slide 25
Slide 25 text
is_number(!!1^!!1) # => ok ❯ perl -MDevel::Peek -e 'Dump !!1^!!1' SV = IV(0x7f93e7015370) at 0x7f93e7015380 REFCNT = 1 FLAGS = (PADTMP,IOK,READONLY,PROTECT,pIOK) IV = 0
Slide 26
Slide 26 text
No content
Slide 27
Slide 27 text
❯ perl -MDevel::Peek -e 'Dump !!1' SV = PVNV(0x7ff3a4001010) at 0x10d9b7b58 REFCNT = 2147483644 FLAGS = (IOK,NOK,POK,READONLY,PROTECT,pIOK,pNOK,pPOK) IV = 1 NV = 1 PV = 0x10d99cd43 "1" CUR = 1 LEN = 0
Slide 28
Slide 28 text
PVNV!
Slide 29
Slide 29 text
PVNV dual value Scalar::Util::isdual
Slide 30
Slide 30 text
sub is_number { my $value = shift; looks_like_number($value) && ($value^$value) eq '0' && !isdual($value) }
Slide 31
Slide 31 text
No content
Slide 32
Slide 32 text
雑まとめ p5-Lodash の話から Perl の話に脱線 SV は、 多態 コンテキストで、 値が変わる 見ようと思えば、 中身も見れる Devel::Peek B.pm etc
Slide 33
Slide 33 text
進捗
Slide 34
Slide 34 text
7/256
Slide 35
Slide 35 text
やっていき
Slide 36
Slide 36 text
Gotanda.pm #18 6/11( 月) 株式会社メルカリ 六本木! スピー カー @kazeburo 「System Programming and Perl」
Slide 37
Slide 37 text
ぱー るもんがー ごたぴー きちぴー ぜんぶがいねん ( 字余り)