Learn Languages 2018 in ODC (LL2018), 2018/08/26
Perl5ͷύοέʔδϚωʔδϟShoichi Kaji
View Slide
Me• Shoichi Kaji• CPAN, github: skaji• the author of cpm (a Perl5 module installer)
͜ͷൃදͷత• Perl5Λීஈ͋·Γ৮͍ͬͯͳ͍ਓΛରʹ• ࠓޙɺPerl5Λ৮Ζ͏ͱͨ͠ͱ͖ͷͨΊʹ• moduleͷΠϯετʔϧཧͷΓํΛ ఏࣔ͢Δ
Contents• moduleͷΠϯετʔϧ - cpanm• ґଘmoduleͷએݴ - cpanfile• ґଘmoduleͷversionอଘɺ࠶ݱ - carton• ·ͱΊ• ࠓޙͷಈ͖
moduleͷΠϯετʔϧ› perl monitor.plCan't locate Capture/Tiny.pm in @INC(you may need to install the Capture::Tiny module)…ͨͱ͑Perl5Ͱॻ͔ΕͨࢹεΫϦϓτmonitor.pl͕͋Δͱ͢ΔɻͦΕΛ࣮ߦ͢Δͱ...Capture::Tiny͕ೖͬͯͳ͍
moduleͷΠϯετʔϧmoduleͷΠϯετʔϧʹcpanmΛ͏cpanmࣗͷΠϯετʔϧํ๏# case1. globalʹೖΕΔ› curl https://cpanmin.us | perl - -n App::cpanminus# ͠perl͕system perlͷ߹ɺͪΖΜsudo͕ඞཁ› curl https://cpanmin.us | perl - -n --sudo App::cpanminus# case2. ڥΛԚͨ͘͠ͳ͍߹ΧϨϯτσΟϨΫτϦʹऔͬͯ͘ΕΑ͍› curl -o cpanm https://cpanmin.us› perl ./cpanm --version
moduleͷΠϯετʔϧ# Capture::TinyΛΠϯετʔϧ› cpanm -n Capture::TinySuccessfully installed Capture-Tiny-0.48› perl monitor.pl# WORkS!
moduleͷΠϯετʔϧ# σϑΥϧτͰ୯ମςετΛΒ͔ͤͯΒΠϯετʔϧ͢Δ# -n ͰͦΕΛεΩοϓͰ͖Δ› cpanm -n Amon2# σϑΥϧτͰɺglobalͳσΟϨΫτϦʹmoduleΛΠϯετʔϧ͢Δ# ڥΛԚͨ͘͠ͳ͍߹ɺ-L ΛͬͯΠϯετʔϧઌΛมߋ͢Δ› cpanm -L ./local Mojolicious# ࣮ߦ࣌ -I ͰͦͷσΟϨΫτϦΛsearch pathʹՃ͢Δ› perl -I ./local/lib/perl5 script.pl͍͔ͭ͘ͷcpanmͷtips
ґଘmoduleͷએݴ• ࣗͰPerl5ͷεΫϦϓτΛॻ͍ͨͱ͠Α͏• ͍͔ͭ͘ґଘmodule͕͋Δ͚ΕͲɺ ͦΕΛͲ͏Ϣʔβʹ͑Ε͍͍ͷ͔ • cpanfileΛ͓͏
ґଘmoduleͷએݴcpanfile - ґଘmoduleΛએݴ͢ΔϑΝΠϧ› cat cpanfilerequires 'Plack', '1.0'; # 1.0 or newerrequires 'JSON', '>= 2.00, < 2.80';# ୯ମςετ࣌ͷΈඞཁͳmoduleon test => sub {requires 'Test::More', '== 1.302140';recommends 'Test::TCP', '1.12';};
ґଘmoduleͷએݴ# cpanfile͕͋ΔσΟϨΫτϦͰcpanmΛ--installdepsͱͱʹ# ࣮ߦ͢ΕґଘmoduleΛΠϯετʔϧͰ͖Δ› capnm -n --installdeps .# -L ͱΈ߹ΘͤΕɺΧϨϯτσΟϨΫτϦʹ# ґଘmoduleΛΠϯετʔϧͰ͖Δ› cpanm -n -L ./local --installdeps .› perl -I ./local/lib/perl5 script.plcpanfileʹґଘmoduleΛએݴ͢Ε cpanmͰ؆୯ʹΠϯετʔϧͰ͖Δ
ґଘmoduleͷversionอଘɺ࠶ݱ• Perl5ͰຊࠊΛೖΕͯΞϓϦέʔγϣϯΛॻ͍͍ͯ͘ͱɺґଘmodule͙͢ʹ100Λ͑Δ• ͢Δͱґଘmoduleͷversionʹහײʹͳͬͯ͘Δ• ։ൃڥͰςετΛpassͨ͠ͱ͖ͷґଘmoduleͷversionΛͯ͢อଘ͠ɺͦΕΛຊ൪Ͱ࠶ݱ͍ͨ͠• cartonΛ͓͏
ґଘmoduleͷversionอଘɺ࠶ݱ# CartonࣗͷΠϯετʔϧ› cpanm -n Carton# cpanfileͰએݴ͞ΕͨґଘmoduleΛ./localʹΠϯετʔϧ͢Δ› carton installComplete! Modules were installed into …/local# Πϯετʔϧͨ͠moduleͷversioncpanfile.snapshotʹอଘ͞ΕΔ› lscpanfile cpanfile.snapshot local# carton execͰ./localΛsearch pathʹೖΕͯperlΛىಈͰ͖Δ# (ͪΖΜɺcarton execΛΘͣࣗͰ-IΛࢦఆͯ͠Α͍)› carton exec perl script.plcartonΛ༻͍ͨ։ൃϑϩʔ(1)
ґଘmoduleͷversionอଘɺ࠶ݱ# ͦͷޙɺผͷڥͰ--deploymentΛ͚ͭͯΠϯετʔϧ͢Δ͜ͱͰ# snapshotʹهड़͞ΕͨversionΛ࠶ݱͰ͖Δ› carton install --deploymentInstalling modules using …/cpanfile (deployment mode)Complete! Modules were installed into …/localcartonΛ༻͍ͨ։ൃϑϩʔ(2)
·ͱΊ• moduleͷΠϯετʔϧʹcpanmΛ͏• ґଘmoduleͷએݴʹcpanfileΛ͏• ґଘmoduleͷversionอଘɺ࠶ݱʹ cartonΛ͏
ࠓޙͷಈ͖ (πʔϧ)• moduleΠϯετʔϥͱͯ͠cpanmҎ֎ʹ CPAN.pm, CPANPLUS, cpmͳͲ͕͋Δ• cartonͷޙܧͱͯ͠carmel͕։ൃ͞Ε͍ͯΔ
ࠓޙͷಈ͖ (Έ)• Perl5ͰGNU Autotoolsͱಉ͡Α͏ʹϢʔβαΠυͰεΫϦϓτΛ࣮ߦͤ͞ɺΠϯετʔϧ࣌ͷڍಈΛಈతʹมԽͤ͞Δͷ͕ৗͰ͋ͬͨɻ Ұํɺେͷ߹͜ΕoverkillͰ͋Γɺ੩తղੳͱ૬ੑ͕ѱ͍ɻ ͜Εʹର͠ɺࡢࠓɺͬͱγϯϓϧͳstatic installͱ͍͏ΠϯετʔϧͷΈ͕ఏҊ͞Ε͍ͯΔɻ• Perl5Ͱී௨ɺͯ͢ͷmoduleͨͪΛ͋ΔҰͭͷσΟϨΫτϦʹ·ͱΊͯΠϯετʔϧ͍ͯ͠Δɻ ͔͠͠ɺͦ͏ͯ͠͠·͏ͱɺͲͷmodule͕Ͳͷdistributionʹଐ͢Δͷ͔Θ͔Βͳ͘ͳΓɺཧ͕͠ʹ͘͘ͳΔɻ ͜Εʹର͠ɺʮdistribuitonΛผʑʹཧ͠ɺ࣮ߦ࣌ʹͦΕΒΛదʹsearchpathʹஔ͠Α͏ʯͱ͍͏ΞΠσΞ͕͋Γ carmel·͞ʹͦΕΛ࣮͍ͯ͠Δɻ