Más contenido relacionado
La actualidad más candente (20)
Similar a 20年越しで Perl 4 to 5 した話 (20)
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/
- 7. 研究室にありがちなこと
✤ 文書がない
✤ テストがない
✤ バージョン管理されてない
✤ コードが古い
✤ コードが古い
✤ コードがすごく古い
- 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
- 14. CPAN
✤ これは説明不要だった
✤ Text::*, Lingua::* 超便利
✤ 車輪が大分減った
- 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 del 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