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
Hokkaido.pm#11
Search
akiym
December 28, 2013
Technology
5.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Hokkaido.pm#11
Cocoa module, perl-5.19
akiym
December 28, 2013
More Decks by akiym
See All by akiym
Webセキュリティのあるきかた
akiym
40
21k
CPAN Module Hacks
akiym
0
2.8k
Perlコーディングテクニック2018
akiym
0
11k
新時代のテストフレームワークTest2
akiym
2
20k
脆弱なアプリを書く技術
akiym
11
9.4k
Herokuで学ぶ、初めてのPerl
akiym
5
3k
Perl meets Leap Motion
akiym
0
1.6k
github止まり モジュール5選
akiym
0
1.6k
Skype効率化
akiym
1
2.1k
Other Decks in Technology
See All in Technology
いちAWSエンジニアのAI活用を振り返る #devio2026 / devio osaka 2026 kawahara
masahirokawahara
1
290
「今盗んで、後で解く」に備える ― AWSのポスト量子暗号入門
yama3133
2
280
20260929_AmazonGuardDutyの検出通知メールにAWS DevOpsAgentの調査結果を追加する
yhana
1
390
企業の現実世界をグラフで写し取る
sansantech
PRO
0
220
The seven pitfalls of AI (revised version)
ufried
0
160
MCPゲートウェイを作って運用してわかったこと — Agent時代の権限管理の現在地
mtpooh
6
2.3k
AI感のないAWS構成図をAIエージェントに描かせたい!
sagochiko
2
480
AI Made Us Faster at Solving the Wrong Problems
marceloancelmo
0
100
Terraformを用いたJamf Pro構成のIaC, GitOps化への挑戦
yukun
0
120
Codex概要
ymiya55
0
120
Meet AgentCore Identity Consent Portal
hironobuiga
2
140
【ゲームメーカーズスクランブル2026】『Shadowverse: Worlds Beyond』UIとアニメーションで実現する最高のユーザー体験を叶えるプロトタイピング
cygames
PRO
1
710
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
330
41k
We Have a Design System, Now What?
morganepeng
55
8.3k
Color Theory Basics | Prateek | Gurzu
gurzu
1
480
RailsConf 2023
tenderlove
30
1.6k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
A better future with KSS
kneath
240
18k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
620
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Six Lessons from altMBA
skipperchong
29
4.5k
Statistics for Hackers
jakevdp
799
230k
Transcript
ࠓॻ͍ͨ 1FSMͷίʔυͷৼΓฦΓ )PLLBJEPQN !BLJZN
NF w !BLJZN w w TFDDBNQ ZBQDBTJB w 4&$$0/ࡳຈେձ༏উ
DUGLBUTVEPOPSH
$1"/HJUIVC
$1"/ w "OZ&WFOU4,,4FSW w $PDPB/FUXPSL$IBOHF w 3FHFYQ7FSCBM&YQSFTTJPOT
$1"/ w "OZ&WFOU4,,4FSW w $PDPB/FUXPSL$IBOHF w 3FHFYQ7FSCBM&YQSFTTJPOT
None
ϑλΛดͯ͡ˠ։͘ͷ8J'JͷεΠονΛ ར༻ͯ͠ࠂന͞ΕΔ
(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
લճͷ)PLLBJEPQN Ͱ͠·ͨ͠
None
$PDPBNPEVMF
w ͳͥ$PDPBϞδϡʔϧΛॻ͘ͷ͔ʁ w $PDPB"1*Λ৮Γ͍͔ͨΒ w 1FSMͰ.BDΞϓϦ͡Όͳͯ͘ɺ.BDͷػೳʹ ΞΫηε͍͚ͨͩͩ͠͠ɺ୯ମϞδϡʔϧʹ͠ ͍ͯͬͨ΄͏͕ΈΜͳ͕ͤ w ͱUZQFTUFS͞Μ͕ݴ͍ͬͯͨ
BHSFF
$PDPBNPEVMFͷ ࡞Γํ
w ࠷ۙ w 946#Ͱॻ͚ΔΑ͏ʹͳͬͨͷͰઈศར w ֵ໋ w $PDPB(SPXM$PDPB4LZQF໘ͳ͜ͱΛ ͍ͯ͠Δ w
YTVCQQ͕ੜ͢ΔDΛखͰॻ͘Α͏ͳ͜ͱ
NJOJMOFX w .JOJMMBͰ࡞͢Δ w ANJOJMOFXQ94.PEVMFA w CVJMEFS.Z#VJMEFSQNΛ࡞ w IUUQTPIIBUFOBCMPHDPNFOUSZ
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ͷϦϯΫ
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;
NJOJMUPNM [build] build_class = "builder::MyBuilder"
w YTʹΰϦΰϦͱॻ͍͍ͯ͘ w NBLF͢ΔͱN͕ੜ͞ΕΔ w HJUJHOPSFʹlib/Foo.mͷΑ͏ʹՃ͓ͯ͘͠
w ී௨ͷ94ͱಉ͡Α͏ʹॻ͚·͢ w $PDPBˠ1FSM 1FSMˠ$PDPBͷσʔλͷม ʹؾΛ͚ͭΕ͍͍͚ͩͰ͢ w ͦΕҎ֎ͨͩͷ94 w Ͳ͏Ε͍͍Μͩʜͱ͍͏ͱ͖ʹ
w UZQFTUFS͞ΜTPI͞ΜͷSFQPTJUPSZΛ ࢀߟʹ͢Δ
σʔλͷม w IUUQXXXTMJEFTIBSFOFUUZQFTUFSIBDLJOHNBDPTYDPDPBBQJGSPN QFSM w IUUQTHJUIVCDPNTPI$PDPB/4%JTUSJCVUFE/PUJpDBUJPO$FOUFS CMPCNBTUFSOT@EJTUSJCVUFE@OPUJpDBUJPO@DFOUFSN • nsnumber_to_sv(), ns_to_sv()
σʔλͷม # e.g. NSString → SVPV ! SV* sv =
sv_2mortal(newSV(0)); sv_setpv(sv, [str UTF8String]);
Ͱ
.BD,FZCPBSE-&% w ͱ͍͏ϞδϡʔϧΛ࡞Γ·ͨ͠ w IUUQHPPHMFNBDCMPHTQPUKQ NBOJQVMBUJOHLFZCPBSEMFETUISPVHIIUNM w ͜ΕΛͦͷ··࣋ͬͯ͘Δ͜ͱʹ w ͳͷͰɺઆ໌͢Δ͜ͱ͕͋Γ·ͤΜ
HJUIVCDPNBLJZN.BD,FZCPBSE-&%
JTTVF w .JOJMMBͰ%FWFM"TTFSU04తͳ͜ͱΛ͍ͨ͠ w CVJMEFS.Z#VJMEFSQNIBDL • die 'OS unsupported' unless
($^O eq 'darwin');
QFSM
MBUFTUSFMFBTF QFSM
QFSMEFMUBΛோΊΔ
IBTITMJDFTZOUBY w %hash{…} %array[...] w LFZWBMVF JOEFYWBMVF ͷϦετΛฦ͠·͢ w ͍͚ͯΔ
IBTITMJDFTZOUBY my %h = ( blonk => 2, foo =>
3, squink => 5, bar => 8, ); my %subset = %h{qw/foo bar/}; # => (foo => 3, bar => 8)
IBTITMJDFTZOUBY my @a = "a".."z"; my @list = %a[3,4,6]; #
=> (3, "d", 4, "e", 6, "g")
QPTUpYEFSFGFSFODJOH w ޙஔσϦϑΝϨϯε w !BˠB! w ෳࡶͳσʔλߏΛૢ࡞͢Δͱ͖ʹศར w TMJDFͱΈ߹ΘͤΔ͜ͱ͕Ͱ͖Δ
QPTUpYEFSFGFSFODJOH no warnings 'experimental::postderef'; use feature qw/postderef/; ! my $r
= [1, 2, 3]; my @a = @$r; my @b = $r->@*;
σʔλߏ my $foo = { bar => { baz =>
{ a => 1, b => 2, c => 3, } } }; !
σʔλߏ my $foo = { bar => { baz =>
{ a => 1, b => 2, c => 3, } } }; ! my @ab = @{$foo->{bar}{baz}}{qw/a b/}; # => [1, 2] ࠈͬΆ͍
σʔλߏ my $foo = { bar => { baz =>
{ a => 1, b => 2, c => 3, } } }; ! my @ab = $foo->{bar}{baz}->@{qw/a b/}; # => [1, 2]
: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',
ࠓ·Ͱ # video_url_mapから各フォーマットのデータを # ひっぱってくる ! my @data = @{$data->{video_url_map}}{@{$data->{fmt_list}}};
# video_url_mapから各フォーマットのデータを # ひっぱってくる ! my @data = @{$data->{video_url_map}}{@{$data->{fmt_list}}}; ࠓ·Ͱ
QPTUEFSFG # video_url_mapから各フォーマットのデータを # ひっぱってくる ! my @data = $data->{video_url_map}->@{$data->{fmt_list}->@*};
w QSPUPUZQFBUUSJCVUF w sub foo($$){}ˠsub foo : prototype($$){} w Perl
5.19.2から $!が decodeされる w http://d.hatena.ne.jp/syohex/ 20131227/1388149250
1FSM2VJ[
͜ͷίʔυಈ͘ʁ # メモリは十分にあるとする # perl-5.18.1 (64bit) ! my @a; $a[2**31]
= 1; ! # =>
͜ͷίʔυಈ͘ʁ # メモリは十分にあるとする # perl-5.18.1 (64bit) ! my @a; $a[2**31]
= 1; ! # => Modification of non-creatable array value attempted, subscript -2147483648 ಈ͔ͳ͍
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.
EFQSFDBUJPOT w $(*QN w ͬͱ ɾТɾʆ
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
·ͱΊ w ͪΐͬͱͨ͠$PDPBNPEVMFͷ࡞Γํ w QFSM w IBTITMJDFTZOUBY QPTUpYEFSFGFSFODJOH