Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
p5-Lodash!
Search
Kenta Kobayashi
May 26, 2018
Technology
2
830
p5-Lodash!
吉祥寺.pm #14 / LT
Kenta Kobayashi
May 26, 2018
Tweet
Share
More Decks by Kenta Kobayashi
See All by Kenta Kobayashi
Perlの生きのこり - エンジニアがこの先生きのこるためのカンファレンス2025
kfly8
4
2.4k
Tシャツに書かれたコードを読む
kfly8
0
1.3k
Introduce Sub::Meta
kfly8
0
65
研修はイベントでなくコミュニティ作り
kfly8
0
2.1k
明日からできる新人のオンボーディングガイド
kfly8
0
830
メンター成長のためのふりかえり会
kfly8
0
1.3k
Interfaces in Perl5 at The Perl Conference 2019 in Pittsburgh
kfly8
0
3k
経験から効率よく学習する
kfly8
0
430
Interfaces in Perl5
kfly8
1
960
Other Decks in Technology
See All in Technology
2025-06-26_Lightning_Talk_for_Lightning_Talks
_hashimo2
2
110
Geminiとv0による高速プロトタイピング
shinya337
0
200
LangChain Interrupt & LangChain Ambassadors meetingレポート
os1ma
2
220
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
26k
使いたいMCPサーバーはWeb APIをラップして自分で作る #QiitaBash
bengo4com
0
1.2k
KubeCon + CloudNativeCon Japan 2025 Recap
ren510dev
1
300
登壇ネタの見つけ方 / How to find talk topics
pinkumohikan
5
590
モバイル界のMCPを考える
naoto33
0
350
KubeCon + CloudNativeCon Japan 2025 Recap Opening & Choose Your Own Adventureシリーズまとめ
mmmatsuda
0
230
OPENLOGI Company Profile for engineer
hr01
1
33k
生成AI時代の開発組織・技術・プロセス 〜 ログラスの挑戦と考察 〜
itohiro73
1
370
Github Copilot エージェントモードで試してみた
ochtum
0
130
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
270
20k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Optimizing for Happiness
mojombo
379
70k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
A Modern Web Designer's Workflow
chriscoyier
694
190k
The World Runs on Bad Software
bkeepers
PRO
69
11k
Building Adaptive Systems
keathley
43
2.6k
Making the Leap to Tech Lead
cromwellryan
134
9.4k
Statistics for Hackers
jakevdp
799
220k
Rebuilding a faster, lazier Slack
samanthasiow
82
9.1k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
Typedesign – Prime Four
hannesfritz
42
2.7k
Transcript
p5-Lodash! 吉祥寺.pm14 / LT @k y8
_.defaults({ 'a': 1 }, { 'a': 3, 'b': 2 });
// → { 'a': 1, 'b': 2 } _.partition([1, 2, 3, 4], n => n % 2); // → [[1, 3], [2, 4]]
p5-Lodash Perl5 port of Lodash.js 同じ挙動を目指してる ( ひとまず) 手書き Inline
module に頼るでなく、 真正面から モチベー ション JSer に楽してもらいたい CPAN に便利なモジュー ルがたくさんあるけ ど、 知らないが為に損することもある
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]]
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]]
use Lodash -core; # => export core functions
_.add
6 + 4
❯ perl -e 'print 6 + 4' 10 ❯ node
-e 'console.log(6+4)' 10
'6' + '4'
❯ perl -e "print '6' + '4'" 10 ❯ node
-e "console.log('6'+'4')" 64
_.add(6, 4) # => 10 _.add('6', '4') # => '64'
❯ perl -MDevel::Peek -e "Dump 6" SV = IV(0x7fdf7d011370) at
0x7fdf7d011380 REFCNT = 1 FLAGS = (IOK,READONLY,PROTECT,pIOK) IV = 6
❯ 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
どちらも Scalar Value だけど、 中身は違う 一方は、 Integer Value もう一方は Pointer
Value 6 と '6' の中身の違いを浮き出せれば、 区別できる
use B;
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;
None
XOR operator
use Test::More; ok((6^6) eq '0'); ok not (('6'^'6') eq '0');
done_testing;
use Test::More; # NUL ok not ((6^6) eq "\0"); ok(('6'^'6')
eq "\0"); done_testing;
sub is_number { my $value = shift; looks_like_number($value) && ($value^$value)
eq '0' }
None
!!1
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
None
❯ 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
PVNV!
PVNV dual value Scalar::Util::isdual
sub is_number { my $value = shift; looks_like_number($value) && ($value^$value)
eq '0' && !isdual($value) }
None
雑まとめ p5-Lodash の話から Perl の話に脱線 SV は、 多態 コンテキストで、 値が変わる
見ようと思えば、 中身も見れる Devel::Peek B.pm etc
進捗
7/256
やっていき
Gotanda.pm #18 6/11( 月) 株式会社メルカリ 六本木! スピー カー @kazeburo 「System
Programming and Perl」
ぱー るもんがー ごたぴー きちぴー ぜんぶがいねん ( 字余り)