Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
p5-Lodash!
Search
Kenta Kobayashi
May 26, 2018
Technology
920
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
p5-Lodash!
吉祥寺.pm #14 / LT
Kenta Kobayashi
May 26, 2018
More Decks by Kenta Kobayashi
See All by Kenta Kobayashi
Perlの生きのこり - YAPC::Fukuoka 2025
kfly8
0
2.2k
プロジェクトの空気を読んで開発してくれるPerlのAIツールがほしい
kfly8
2
1.1k
Perlの生きのこり - エンジニアがこの先生きのこるためのカンファレンス2025
kfly8
4
3.3k
Tシャツに書かれたコードを読む
kfly8
0
1.5k
Introduce Sub::Meta
kfly8
0
110
研修はイベントでなくコミュニティ作り
kfly8
0
2.3k
明日からできる新人のオンボーディングガイド
kfly8
0
930
メンター成長のためのふりかえり会
kfly8
0
1.5k
Interfaces in Perl5 at The Perl Conference 2019 in Pittsburgh
kfly8
0
3.4k
Other Decks in Technology
See All in Technology
企業の現実世界をグラフで写し取る
sansantech
PRO
0
240
AI駆動開発、viviONの1年 ── うまくいったこと・いかなかったこと
vivion
0
130
OpenClawでAzure DevOpsのWiki更新を自動化する - クラウドAIだけでは届かない場所へ
yutakaosada
0
140
Argo CDとAtlantisで実現するインフラ管理のセルフサービス化──小規模SREチームで支えるプラットフォーム
cassius7
0
270
AI感のないAWS構成図をAIエージェントに描かせたい!
sagochiko
2
490
Snowflake Horizon Catalog と Apache Iceberg で作る オープンなデータ基盤
kitagawaz
0
380
【ゲームメーカーズスクランブル2026】『Shadowverse: Worlds Beyond』UIとアニメーションで実現する最高のユーザー体験を叶えるプロトタイピング
cygames
PRO
1
710
生成AIと進める探索的データ分析(2026.10.03 第122回Tokyo.R勉強会)
tatamiya
1
780
大阪オフィスに Unitree Go2 がやってきたので Physical AI やってみた
dafujii
0
220
AI Made Us Faster at Solving the Wrong Problems
marceloancelmo
0
130
覗いてみよう 関数型ビジュアル言語×2Dグラフィックスの世界
yohyamasaki
0
160
スキルを作る、その前に!複数人で使われるスキルを 作るためのプロセス
junkifurukawa
2
160
Featured
See All Featured
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
840
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
560
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
390
Code Reviewing Like a Champion
maltzj
528
40k
Fireside Chat
paigeccino
43
4k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
260
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」
ぱー るもんがー ごたぴー きちぴー ぜんぶがいねん ( 字余り)