Slide 1

Slide 1 text

PPR と Keyword::Simple と あと Variable::Declaration YAPC::Okinawa 2018 / LT @k y8

Slide 2

Slide 2 text

k y8 2 歳の娘の父になった モバファク JPA

Slide 3

Slide 3 text

agenda 1. PPR 2. Keyword::Simple 3. Variable::Declaration

Slide 4

Slide 4 text

PPR

Slide 5

Slide 5 text

PPR Perl の静的解析モジュー ル 類似モジュー ルは、PPI 正規表現を使った、 解析ができる Statement,Variable,Block,etc

Slide 6

Slide 6 text

PPR example use PPR; my $s = 'my $yapc:OKINAWA = "OIST"'; print $s =~ m{ ((?&PerlAttributes)) $PPR::GRAMMAR }x; # => :OKINAWA

Slide 7

Slide 7 text

PPR pros/cons 意図はわかりやすく、 簡潔 意図通りに作るのが難しい( 主観) Perl が柔軟すぎて

Slide 8

Slide 8 text

Keyword::Simple

Slide 9

Slide 9 text

Keyword::Simple Pure Perl で Perl にキー ワー ド追加できる PL_keyword_plugin を利用 類似モジュー ル Devel::Declare Keyword::Declare

Slide 10

Slide 10 text

Keyword::Simple example package ExampleKeywordSimple; use Keyword::Simple; sub import { Keyword::Simple::define 'yapc' => sub { my $ref = shift; substr($$ref, 0, 0) = 'print " はいさい!";sub'; }; } 1; use ExampleKeywordSimple; yapc okinawa { } # => はいさい!

Slide 11

Slide 11 text

Keyword::Simple pros/cons Pure Perl で Perl を弄れる(2 回目) B::Deparse が手放せない( 主観) use ExampleKeywordSimple; BEGIN { $^H{'Keyword::Simple/keywords'} = 'HASH(0x7fc1b940a018)' } ; ; print " はいさい!"; sub okinawa { BEGIN { $^H{'Keyword::Simple/keywords'} = 'HASH(0x7fc1b940a018)' } }

Slide 12

Slide 12 text

PPR × Keyword::Simple Pure Perl で Perl を静的解析した結果を用いて Perl を拡張できる

Slide 13

Slide 13 text

Variable::Declaration

Slide 14

Slide 14 text

Variable::Declaration PPR × Keyword::Simple 変数宣言の拡張 use Type::Tie use Data::Lock

Slide 15

Slide 15 text

Variable::Declaration example use Variable::Declaration; use Types::Standard qw/Int/; let Int $foo = 2018; $foo = 'YAPC'; # ERROR: Value "YAPC" did not pass type constraint "Int"

Slide 16

Slide 16 text

deparse example use Variable::Declaration; use Types::Standard ('Int'); use feature 'state'; BEGIN { $^H{'Keyword::Simple/keywords'} = 'HASH(0x7fc8de02e350)' } ; ; my $foo = 2018; croak(Int->get_message($foo)) unless Int->check($foo); ttie $foo, Int; $foo = 'YAPC';

Slide 17

Slide 17 text

Variable::Declaration pros/cons buggy ( v0.01 ) 静的型付き言語を使えば? と言われる

Slide 18

Slide 18 text

Thanks!!