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
Transcript
53 slides
ࠓॻ͍ͨ 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
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
Kiro Crew の Bot (続く役目を任せる窓口) | 目指せ Kiro マスター 12
inariku
PRO
2
380
Context Ontology Accelerator 入門 (業務データの意味を、AI エージェントに渡す)
inariku
PRO
3
670
田んぼから始まる挑戦 〜新米農家の1年目〜
miu_crescent
PRO
0
270
LLM 基盤と kagent v0 を全部 k8s に入れてみた / Deploy both LLM and kagent v0 in k8s
kota2and3kan
0
190
JAWS_FESTA2026_オンプレ-AWS間プロキシサーバの移行_性能_障害対応で得た実践ノウハウ_高島一晃.pdf
tkazuaki0820
1
120
Quick Automate | 目指せ Quick マスター 12
inariku
PRO
1
110
マネジメントされる側の仕事は「文句」を言うこと
riyaamemiya
2
560
Bots in Kiro Crew (One point of contact for ongoing work) | Kiro: Zero to Hero 12
inariku
PRO
1
130
Context != Context: One window, many lifecycles (AI Native DevCon, Nov 2026)
birgitta410
0
130
Steering と Hook (チームの決まりを守らせる) | 目指せ Kiro マスター 06
inariku
PRO
2
120
BALLAS Technology Deck
ballas_inc
0
590
Where Should Platform Complexity Live? Lessons from a Cross-Team PR Preview Platform
taiki45
0
110
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
247
13k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
370
Faster Mobile Websites
deanohume
310
32k
Google's AI Overviews - The New Search
badams
0
1.7k
30 Presentation Tips
portentint
PRO
1
470
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.5k
Building Better People: How to give real-time feedback that sticks.
wjessup
371
20k
Making Projects Easy
brettharned
120
6.9k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
Navigating Team Friction
lara
192
16k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.4k
Navigating Weather and Climate Data
rabernat
0
590