Enviar pesquisa
Carregar
20年越しで Perl 4 to 5 した話
•
1 gostou
•
5,823 visualizações
O
outerinside
Seguir
株式会社スカイアーク様の支援で YAPC::Asia Tokyo 2012 で発表した LT のスライドです
Leia menos
Leia mais
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 28
Recomendados
Write good parser in perl
Write good parser in perl
Jiro Nishiguchi
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
charsbar
2017年夏のPerl
2017年夏のPerl
charsbar
2017年春のPerl
2017年春のPerl
charsbar
Everyday Life with clojure.spec
Everyday Life with clojure.spec
Kent Ohashi
CMSとPerlで遊ぼう
CMSとPerlで遊ぼう
Daiki Ichinose
Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418
Uehara Junji
php7's ast
php7's ast
do_aki
Recomendados
Write good parser in perl
Write good parser in perl
Jiro Nishiguchi
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
charsbar
2017年夏のPerl
2017年夏のPerl
charsbar
2017年春のPerl
2017年春のPerl
charsbar
Everyday Life with clojure.spec
Everyday Life with clojure.spec
Kent Ohashi
CMSとPerlで遊ぼう
CMSとPerlで遊ぼう
Daiki Ichinose
Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418
Uehara Junji
php7's ast
php7's ast
do_aki
How to debug a perl script using gdb
How to debug a perl script using gdb
akirahiguchi
Local php-100828 2
Local php-100828 2
Akio Ishida
Traitsについて
Traitsについて
Tetsuji Koyama
from old Java to modern Java
from old Java to modern Java
心 谷本
ocamloptの全体像
ocamloptの全体像
Kiwamu Okabe
Lisp batton - Common LISP
Lisp batton - Common LISP
Masaomi CHIBA
Kotlin勉強会 in ehime
Kotlin勉強会 in ehime
Eigoro Yamamura
Clojureで作る"simple"なDSL
Clojureで作る"simple"なDSL
Kent Ohashi
2018年夏のPerl5
2018年夏のPerl5
charsbar
One - Common Lispでもワンライナーしたい
One - Common Lispでもワンライナーしたい
t-sin
Perl勉強会#2資料
Perl勉強会#2資料
Kiyo Tsunezumi
Node.js Error & Debug Leveling
Node.js Error & Debug Leveling
kumatch kumatch
PHPの今とこれから 2013
PHPの今とこれから 2013
Rui Hirokawa
【簡単テキストマイニング】歌詞から作品世界の魅力を探る
【簡単テキストマイニング】歌詞から作品世界の魅力を探る
Show T
Haskell で CLI
Haskell で CLI
Nobutada Matsubara
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia
鉄次 尾形
about Perl5.10
about Perl5.10
Kazuki KOMORI
Write up reverse200
Write up reverse200
Yuichi Nagayama
awk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyo
Ryuichi Ueda
HHVM Hack
HHVM Hack
Masaaki Yonebayashi
Go guide for Java programmer
Go guide for Java programmer
Masaaki Yonebayashi
私がPerlを使う理由
私がPerlを使う理由
Yohei Azekatsu
Mais conteúdo relacionado
Mais procurados
How to debug a perl script using gdb
How to debug a perl script using gdb
akirahiguchi
Local php-100828 2
Local php-100828 2
Akio Ishida
Traitsについて
Traitsについて
Tetsuji Koyama
from old Java to modern Java
from old Java to modern Java
心 谷本
ocamloptの全体像
ocamloptの全体像
Kiwamu Okabe
Lisp batton - Common LISP
Lisp batton - Common LISP
Masaomi CHIBA
Kotlin勉強会 in ehime
Kotlin勉強会 in ehime
Eigoro Yamamura
Clojureで作る"simple"なDSL
Clojureで作る"simple"なDSL
Kent Ohashi
2018年夏のPerl5
2018年夏のPerl5
charsbar
One - Common Lispでもワンライナーしたい
One - Common Lispでもワンライナーしたい
t-sin
Perl勉強会#2資料
Perl勉強会#2資料
Kiyo Tsunezumi
Node.js Error & Debug Leveling
Node.js Error & Debug Leveling
kumatch kumatch
PHPの今とこれから 2013
PHPの今とこれから 2013
Rui Hirokawa
【簡単テキストマイニング】歌詞から作品世界の魅力を探る
【簡単テキストマイニング】歌詞から作品世界の魅力を探る
Show T
Haskell で CLI
Haskell で CLI
Nobutada Matsubara
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia
鉄次 尾形
about Perl5.10
about Perl5.10
Kazuki KOMORI
Write up reverse200
Write up reverse200
Yuichi Nagayama
awk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyo
Ryuichi Ueda
HHVM Hack
HHVM Hack
Masaaki Yonebayashi
Mais procurados
(20)
How to debug a perl script using gdb
How to debug a perl script using gdb
Local php-100828 2
Local php-100828 2
Traitsについて
Traitsについて
from old Java to modern Java
from old Java to modern Java
ocamloptの全体像
ocamloptの全体像
Lisp batton - Common LISP
Lisp batton - Common LISP
Kotlin勉強会 in ehime
Kotlin勉強会 in ehime
Clojureで作る"simple"なDSL
Clojureで作る"simple"なDSL
2018年夏のPerl5
2018年夏のPerl5
One - Common Lispでもワンライナーしたい
One - Common Lispでもワンライナーしたい
Perl勉強会#2資料
Perl勉強会#2資料
Node.js Error & Debug Leveling
Node.js Error & Debug Leveling
PHPの今とこれから 2013
PHPの今とこれから 2013
【簡単テキストマイニング】歌詞から作品世界の魅力を探る
【簡単テキストマイニング】歌詞から作品世界の魅力を探る
Haskell で CLI
Haskell で CLI
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia
about Perl5.10
about Perl5.10
Write up reverse200
Write up reverse200
awk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyo
HHVM Hack
HHVM Hack
Semelhante a 20年越しで Perl 4 to 5 した話
Go guide for Java programmer
Go guide for Java programmer
Masaaki Yonebayashi
私がPerlを使う理由
私がPerlを使う理由
Yohei Azekatsu
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
Sotaro Karasawa
詳説ぺちぺち
詳説ぺちぺち
do_aki
WCO2012「PHP教室」
WCO2012「PHP教室」
Takuma Morikawa
Subprocess no susume
Subprocess no susume
Makoto Kishimoto
知って得する標準関数の使い方
知って得する標準関数の使い方
Soudai Sone
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
Kentaro Matsui
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
Ransui Iso
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数
Wataru Terada
Niigata.pm #1
Niigata.pm #1
hayajo Imai
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
博文 斉藤
Java x Groovy: improve your java development life
Java x Groovy: improve your java development life
Uehara Junji
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia
鉄次 尾形
Okinawapm #1
Okinawapm #1
Kei Kamikawa
Perl6で遊ぼう
Perl6で遊ぼう
VienosNotes
node-perl
node-perl
Hideaki Ohno
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
Ransui Iso
Perlで伝統芸能
Perlで伝統芸能
hitode909
Perl 非同期プログラミング
Perl 非同期プログラミング
lestrrat
Semelhante a 20年越しで Perl 4 to 5 した話
(20)
Go guide for Java programmer
Go guide for Java programmer
私がPerlを使う理由
私がPerlを使う理由
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
詳説ぺちぺち
詳説ぺちぺち
WCO2012「PHP教室」
WCO2012「PHP教室」
Subprocess no susume
Subprocess no susume
知って得する標準関数の使い方
知って得する標準関数の使い方
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数
Niigata.pm #1
Niigata.pm #1
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
Java x Groovy: improve your java development life
Java x Groovy: improve your java development life
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Okinawapm #1
Okinawapm #1
Perl6で遊ぼう
Perl6で遊ぼう
node-perl
node-perl
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
Perlで伝統芸能
Perlで伝統芸能
Perl 非同期プログラミング
Perl 非同期プログラミング
20年越しで Perl 4 to 5 した話
1.
20 年越しで Perl
4 to 5 した話 SATOH, Koichi Sep 29 2012 YAPC::Asia Tokyo
2.
謝辞 ✤
「遠方からの参加者支援制度」に補助を頂きました。 株式会社スカイアーク様に御礼申し上げます。
3.
自己紹介 ✤
佐藤光一 ✤ 岡山大学大学院 自然言語処理研究室 ✤ Twitter: @outerinside Github: https://github.com/sekia/ ✤ Blog: http://outer-inside.blogspot.com/
4.
研究室にありがちなこと
5.
研究室にありがちなこと ✤
文書がない ✤ テストがない ✤ バージョン管理されてない ✤ コードが古い
6.
研究室にありがちなこと ✤
文書がない ✤ テストがない ✤ バージョン管理されてない ✤ コードが古い ✤ コードが古い
7.
研究室にありがちなこと ✤
文書がない ✤ テストがない ✤ バージョン管理されてない ✤ コードが古い ✤ コードが古い ✤ コードがすごく古い
8.
研究室にありがちなこと ✤
研究室紹介にて: 「この研究室では Perl を主に使っています」
9.
研究室にありがちなこと ✤
研究室紹介にて: 「この研究室では Perl を主に使っています」 OpenPipe('/usr/local/bin/chasen', C_OUT, C_IN); sub OpenPipe { ← IPC::Open2 (コアモジュール) の再発明 local($pid); local($prg, *OUT, *IN) = @_; ← local 変数・型グロブ pipe(R, IN); ← Bare word なファイルハンドル pipe(OUT, W); unless ($pid = fork) { close(IN); close(OUT); open(STDIN, '<&R') || die "Errorn"; open(STDOUT, '>&W') || die "Errorn"; open(STDERR, '>&W') || die "Errorn"; close(R); close(W); select(STDIN); $| = 1; select(STDOUT); $| = 1; select(STDERR); $| = 1; exec($prg); print STDERR "Open error!n"; exit(0); } close(R); close(W); select(IN); $| = 1; select(STDOUT); }
10.
研究室にありがちなこと ✤
研究室紹介にて: 「この研究室では Perl 4 を主に使っています」(処理系は Perl 5) OpenPipe('/usr/local/bin/chasen', C_OUT, C_IN); sub OpenPipe { ← IPC::Open2 (コアモジュール) の再発明 local($pid); local($prg, *OUT, *IN) = @_; ← local 変数・型グロブ pipe(R, IN); ← Bare word なファイルハンドル pipe(OUT, W); unless ($pid = fork) { close(IN); close(OUT); open(STDIN, '<&R') || die "Errorn"; open(STDOUT, '>&W') || die "Errorn"; open(STDERR, '>&W') || die "Errorn"; close(R); close(W); select(STDIN); $| = 1; select(STDOUT); $| = 1; select(STDERR); $| = 1; exec($prg); print STDERR "Open error!n"; exit(0); } close(R); close(W); select(IN); $| = 1; select(STDOUT); }
11.
Perl 4 to
5! Perl 5 to 6 http://perlgeek.de/en/article/5-to-6
12.
研究室にありがちなこと ✤
せめて10年近代化したい Perl 4.036 1993 (last release of Perl 4) 1994 Perl 5.000 1998 Perl 5.005 2000 Perl 5.6.0 2002 Perl 5.8.0 2007 Perl 5.10.0 2010 Perl 5.12.0 Perl 4 Perl 5 Perl 6 2011 Perl 5.14.0 2012 Perl 5.16.0
13.
Perl 5 の(20年前からある)新機能 ✤
CPAN! ✤ Unicode (Perl 5.8+) ✤ my 変数 ✤ 高階関数 ✤ オブジェクト指向プログラミング Perl 4 Perl 5 Perl 6 ✤ ……
14.
CPAN ✤
これは説明不要だった ✤ Text::*, Lingua::* 超便利 ✤ 車輪が大分減った
15.
Unicode ✤
私「日本語の言語資源今までどうやって処理してたんですか」
16.
Unicode ✤
私「日本語の言語資源今までどうやって処理してたんですか」 → 「全部 EUC-JP」「えっ」「えっ」
17.
Unicode ✤
私「日本語の言語資源今までどうやって処理してたんですか」 → 「全部 EUC-JP」「えっ」「えっ」 「この XML 文書 UTF-8 で書かれてるんだけどどうやって EUC に したら良い?」「」 404 Blog Not Found:perl - Encode 入門 http://blog.livedoor.jp/dankogai/archives/51031595.html
18.
my 変数・高階関数 ✤
local はグローバル変数に一時的な値を与えるだけ (Perl 6 だと temp) ✤ my はスコープに入る毎に別の変数。スコープ外からはアクセス不能 ✤ クロージャに固有の状態を持たせたければ my を使うしかない
19.
my 変数・高階関数 ✤
local はグローバル変数に一時的な値を与えるだけ (Perl 6 だと temp) ✤ my はスコープに入る毎に別の変数。スコープ外からはアクセス不能 ✤ クロージャに固有の状態を持たせたければ my を使うしかない ✤ 「自由変数は関数生成時の束縛を探すんですよ」 とか ! っぽいことを言ったら何故か理解された
20.
オブジェクト指向 ✤
私「Moose を使いましょう! Mooooooooooooooose」 → ハードル高すぎた。DSL は中身を理解して使うもの
21.
オブジェクト指向 ✤
Perl OOP の変なところ ✤ 名前空間 = クラス ✤ クラスは名前空間に所属するよ派: C++, Java, etc. ✤ クラス (とか) がオープンだから名前空間的に使って良いよ派: Ruby, JavaScript ✤ 名前空間がクラス (のつもり) だよ派: Perl 5
22.
オブジェクト指向 ✤
のっけから use でつまづく ✤ 「use Foo::Bar で Foo::Bar クラスが使えるんだよね」 「いやそうとは限りませんよ」「えっ」「えっ」 ✤ Foo/Bar.pm に package Foo::Bar が宣言されている保証はな い ✤ package Foo::Bar がクラスである保証もない
23.
オブジェクト指向 ✤
namespace 的なものを package に期待するとハマる package Foo::Bar { sub func { ... } } package Foo { Bar::func(); # ねーよ }
24.
オブジェクト指向 ✤
namespace 的なものを package に期待するとハマる package Foo { package Bar { say __PACKAGE__; # "Bar" (not "Foo::Bar") } }
25.
オブジェクト指向 ✤
Perl の OOP は単に関数解決の約束事 (言い過ぎ) package Foo; sub new { bless +{ msg => $_[1] } => $_[0] } sub say { say shift->{msg} } package main; my $obj = Foo->new('hello'); $obj->say; # "hello"
26.
オブジェクト指向 ✤
Perl の OOP は単に関数解決の約束事 (言い過ぎ) package Foo; sub new { bless +{ msg => $_[1] } => $_[0] } sub say { say shift->{msg} } package main; my $obj = Foo->new('hello'); $obj->say; # "hello" my $meth = $obj->can('say'); $obj->$meth; # ditto
27.
オブジェクト指向 ✤
Perl の OOP は単に関数解決の約束事 (言い過ぎ) package Foo; sub new { bless +{ msg => $_[1] } => $_[0] } sub say { say shift->{msg} } package main; my $obj = Foo->new('hello'); $obj->say; # "hello" my $meth = $obj->can('say'); $obj->$meth; # ditto +{ msg => 'baa' }->$meth; # "baa"
28.
思ったこと(小並感) ✤
20年前のコードも動く ✤ が、読めない・書きたくない ✤ 最近は比較的 Perl 5 なコードが書けて幸せ ✤ 自分を救うために今からでも Perl 4 to 5
Notas do Editor
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n