Slide 1

Slide 1 text

Use Perl as Better Shell Script @karupanerura Houtou.pm #1

Slide 2

Slide 2 text

@karupanerura • Perl / Go / Java / TypeScript /etc.. • PAUSE: KARUPA • Software Engineer @ DeNA, Co,. LTD. • Chief Director @ Japan Perl Association

Slide 3

Slide 3 text

ࢁསͱࢲ • όϯυ • Live @ KAZOO HALL • ٢ా͏ͲΜ • ޷͖ • ࢁསେֶϫΠϯ • ͏·͍ https://www.yamanashi.ac.jp/social/3131

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

Shell Script

Slide 6

Slide 6 text

Shell Script • ShellߏจΛͦͷ··ར༻ͨ͠εΫϦϓτ • ίϚϯυΛॻ͍ͯͦͷ··࣮ߦͰ͖ΔͷͰ௚ײత • CLIϕʔεͷૢ࡞Λ൒ࣗಈԽ͢Δͷʹศར • WebܥͷਓͳΒ1౓͸ॻ͍ͨ͜ͱ͋Δ͸ͣʁ

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

؆୯ʂศརʂ

Slide 9

Slide 9 text

؆୯……ʁ

Slide 10

Slide 10 text

Shell Scriptͷ೉͠͞ • ίϚϯυͷ؀ڥࠩҟ • macOSͱLinuxͰ͸sed΍awkͳͲͰBSD/GNUҧ͍͕͋ΔʢΦϓγϣϯ͕ҟͳΔʣ • ref. https://speakerdeck.com/mackee/perl-for-shell-awk-and-sed-programmers • ࣮ࡍͷίϚϯυͱϏϧτΠϯίϚϯυͱγΣϧߏจ͕ࠞࡏ͢Δ • bashͷtestͱ[ͱ[[ͷҧ͍Λઆ໌Ͱ͖ΔͬͯਓͲΕ͘Β͍͍·͔͢ʁ • ෳࡶͳσʔλߏ଄Λѻ͏ͷ͕ۤख

Slide 11

Slide 11 text

খωλ: testͱ[ͱ[[ͷҧ͍ bash-5.2$ type [ [ ͸γΣϧ૊ΈࠐΈؔ਺Ͱ͢ bash-5.2$ type test test ͸γΣϧ૊ΈࠐΈؔ਺Ͱ͢ bash-5.2$ type [[ [[ ͸γΣϧͷ༧໿ޠͰ͢

Slide 12

Slide 12 text

খωλ: testͱ[ͱ[[ͷҧ͍ bash-5.2$ type [ [ ͸γΣϧ૊ΈࠐΈؔ਺Ͱ͢ bash-5.2$ type test test ͸γΣϧ૊ΈࠐΈؔ਺Ͱ͢ bash-5.2$ type [[ [[ ͸γΣϧͷ༧໿ޠͰ͢ ಉ͡૊ΈࠐΈؔ਺(alias) ߏจʢਖ਼نදݱͳͲ΋αϙʔτʣ

Slide 13

Slide 13 text

ෳࡶͳσʔλߏ଄ͬͯͨͱ͑͹ • HashMap(Dict)ͷதʹ͞ΒʹHashMap(Dict)Λ࣋ͭͱ͔ • {"user1":{"user2":true}} • ͦͷͳ͔ʹ͞ΒʹArrayΛ࣋ͭͱ͔ • {"user1":{"user2":[100,200]}}

Slide 14

Slide 14 text

ෳࡶͳσʔλߏ଄ in Shell Script $ declare -A data=(["user1"]=(["user2"]=true)) bash: ༧ظ͠ͳ͍τʔΫϯ `(' पลʹߏจΤϥʔ͕͋Γ·͢

Slide 15

Slide 15 text

ෳࡶͳσʔλߏ଄ in Shell Script $ declare -A data=(["user1"]=(["user2"]=true)) bash: ༧ظ͠ͳ͍τʔΫϯ `(' पลʹߏจΤϥʔ͕͋Γ·͢ ʢૉ௚ʹ͸ʣ Ͱ͖ͳ͍

Slide 16

Slide 16 text

ෳࡶͳ͜ͱΛ͢Δͷ͸೉͍͠

Slide 17

Slide 17 text

೉͍͜͠ͱΛ͍ͨ͠ͱ͖͸……?

Slide 18

Slide 18 text

ಠஅͱภݟʹΑΓϓϩάϥϛϯάݴޠΛൺֱ • Ruby/Go/JavaScript/PHP: ؀ڥʹΑͬͯ͸ೖ͍ͬͯͳ͍ • Python • ͍·Ͱ͸͍͍ͩͨͷ؀ڥʹPython3ܥ͕ೖ͍ͬͯΔ • Shellͱߏจ͕͍ͩͿҧ͏ͷͰॻ͖׵͕͑ͪΐͬͱखؒ • Perl • ͍͍ͩͨͷ؀ڥʹೖ͍ͬͯΔ͠Shellͱߏจ΋͍ۙ

Slide 19

Slide 19 text

PerlͱbashͷߏจΛൺֱ #!/usr/bin/perl use strict; use warnings; # コマンドライン引数の取得 my $arg1 = shift @ARGV; # 配列の宣言 my @array; # コマンドの実行 system 'grep status:500 /var/log/ access.log | ...'; #!/bin/bash set -ue -o pipefail # コマンドライン引数の取得 arg1=$1; shift # 配列の宣言 declare -a array # コマンドの実行 grep status:500 /var/log/access.log | ...

Slide 20

Slide 20 text

PerlͱbashͷߏจΛൺֱ # ίϚϯυΛ࣮ߦͯ݁͠ՌΛม਺ʹೖΕ͍ͨ my $result = `grep status:500 file`; # ৚݅෼ذ if ($x > 0) { ... } # ϧʔϓ while ($x > 0) { ... } # ίϚϯυΛ࣮ߦͯ݁͠ՌΛม਺ʹೖΕ͍ͨ result=`grep status:500 file` # ৚݅෼ذ if [[ "$x" -gt 0 ]]; then ... fi # ϧʔϓ while [[ "$x" -gt 0 ]]; do ... done

Slide 21

Slide 21 text

Perl͡ΌΜ (?)

Slide 22

Slide 22 text

࣮ྫ঺հͷίʔφʔ

Slide 23

Slide 23 text

ྫ: json-diff https://github.com/karupanerura/dot fi les/blob/master/bin/json-diff

Slide 24

Slide 24 text

ྫ: jwt https://github.com/karupanerura/dot fi les/blob/master/bin/jwt

Slide 25

Slide 25 text

༨ஊ: zxͱ͍͏΍ͭ΋͋Δ https://github.com/google/zx ׳ΕͯखʹೃછΊ͹Α͍͔΋

Slide 26

Slide 26 text

·ͱΊ

Slide 27

Slide 27 text

·ͱΊ • Shell Script͸ศར͚ͩͲෳࡶͳ͜ͱΛ΍Ζ͏ͱ͢Δͱ೉͍͠ • ෳࡶͳ͜ͱΛ΍Γ͍ͨͱ͖͸ϓϩάϥϛϯάݴޠʹஔ͖׵͑ΔͱΑ͍ • Perl͸Shell Scriptͱߏจ͕͍ۙͷͰҠ২ϋʔυϧ͕௿͍ʢͱࢥ͏ʣ • ਖ਼ղ͕͋ΔΘ͚Ͱ͸ͳ͍ͷͰɺ΍Γ΍͍͢ํ๏Λ໛ࡧ͠·͠ΐ͏