SlideShare uma empresa Scribd logo
1 de 28
20 年越しで Perl 4 to 5 した話
SATOH, Koichi

Sep 29 2012 YAPC::Asia Tokyo
謝辞

✤   「遠方からの参加者支援制度」に補助を頂きました。
    株式会社スカイアーク様に御礼申し上げます。
自己紹介

✤   佐藤光一

✤   岡山大学大学院 自然言語処理研究室

✤   Twitter: @outerinside   Github: https://github.com/sekia/

✤   Blog: http://outer-inside.blogspot.com/
研究室にありがちなこと
研究室にありがちなこと

✤   文書がない

✤   テストがない

✤   バージョン管理されてない

✤   コードが古い
研究室にありがちなこと

✤   文書がない

✤   テストがない

✤   バージョン管理されてない

✤   コードが古い

✤   コードが古い
研究室にありがちなこと

✤   文書がない

✤   テストがない

✤   バージョン管理されてない

✤   コードが古い

✤   コードが古い

✤   コードがすごく古い
研究室にありがちなこと

✤   研究室紹介にて:
    「この研究室では Perl を主に使っています」
研究室にありがちなこと

✤   研究室紹介にて:
    「この研究室では 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);
    }
研究室にありがちなこと

✤   研究室紹介にて:
    「この研究室では 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);
    }
Perl 4 to 5!




                                         Perl 5 to 6
               http://perlgeek.de/en/article/5-to-6
研究室にありがちなこと

✤   せめて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
Perl 5 の(20年前からある)新機能

✤   CPAN!

✤   Unicode (Perl 5.8+)

✤   my 変数

✤   高階関数

✤   オブジェクト指向プログラミング       Perl 4   Perl 5   Perl 6


✤   ……
CPAN

✤   これは説明不要だった

    ✤   Text::*, Lingua::* 超便利

    ✤   車輪が大分減った
Unicode

✤   私「日本語の言語資源今までどうやって処理してたんですか」
Unicode

✤   私「日本語の言語資源今までどうやって処理してたんですか」
    → 「全部 EUC-JP」「えっ」「えっ」
Unicode

✤   私「日本語の言語資源今までどうやって処理してたんですか」
    → 「全部 EUC-JP」「えっ」「えっ」
     「この XML 文書 UTF-8 で書かれてるんだけどどうやって EUC に
      したら良い?」「」




                                         404 Blog Not Found:perl - Encode 入門
                       http://blog.livedoor.jp/dankogai/archives/51031595.html
my 変数・高階関数

✤   local はグローバル変数に一時的な値を与えるだけ
    (Perl 6 だと temp)

✤   my はスコープに入る毎に別の変数。スコープ外からはアクセス不能

✤   クロージャに固有の状態を持たせたければ my を使うしかない
my 変数・高階関数

✤   local はグローバル変数に一時的な値を与えるだけ
    (Perl 6 だと temp)

✤   my はスコープに入る毎に別の変数。スコープ外からはアクセス不能

✤   クロージャに固有の状態を持たせたければ my を使うしかない

    ✤   「自由変数は関数生成時の束縛を探すんですよ」
        とか ! っぽいことを言ったら何故か理解された
オブジェクト指向

✤   私「Moose を使いましょう! Mooooooooooooooose」
    → ハードル高すぎた。DSL は中身を理解して使うもの
オブジェクト指向

✤   Perl OOP の変なところ

    ✤   名前空間 = クラス

        ✤   クラスは名前空間に所属するよ派: C++, Java, etc.

        ✤   クラス (とか) がオープンだから名前空間的に使って良いよ派:
            Ruby, JavaScript

        ✤   名前空間がクラス (のつもり) だよ派: Perl 5
オブジェクト指向

✤   のっけから use でつまづく

    ✤   「use Foo::Bar で Foo::Bar クラスが使えるんだよね」
        「いやそうとは限りませんよ」「えっ」「えっ」

        ✤   Foo/Bar.pm に package Foo::Bar が宣言されている保証はな
            い

        ✤   package Foo::Bar がクラスである保証もない
オブジェクト指向

✤   namespace 的なものを package に期待するとハマる
    package Foo::Bar {
      sub func { ... }
    }

    package Foo {
      Bar::func();   # ねーよ
    }
オブジェクト指向

✤   namespace 的なものを package に期待するとハマる
    package Foo {
      package Bar {
        say __PACKAGE__;   # "Bar" (not "Foo::Bar")
      }
    }
オブジェクト指向

✤   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"
オブジェクト指向

✤   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
オブジェクト指向

✤   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"
思ったこと(小並感)

✤   20年前のコードも動く

✤   が、読めない・書きたくない

✤   最近は比較的 Perl 5 なコードが書けて幸せ

✤   自分を救うために今からでも Perl 4 to 5

Mais conteúdo relacionado

Mais procurados

How to debug a perl script using gdb
How to debug a perl script using gdbHow to debug a perl script using gdb
How to debug a perl script using gdbakirahiguchi
 
Local php-100828 2
Local php-100828 2Local php-100828 2
Local php-100828 2Akio Ishida
 
from old Java to modern Java
from old Java to modern Javafrom old Java to modern Java
from old Java to modern Java心 谷本
 
ocamloptの全体像
ocamloptの全体像ocamloptの全体像
ocamloptの全体像Kiwamu Okabe
 
Lisp batton - Common LISP
Lisp batton - Common LISPLisp batton - Common LISP
Lisp batton - Common LISPMasaomi CHIBA
 
Kotlin勉強会 in ehime
Kotlin勉強会 in ehimeKotlin勉強会 in ehime
Kotlin勉強会 in ehimeEigoro Yamamura
 
Clojureで作る"simple"なDSL
Clojureで作る"simple"なDSLClojureで作る"simple"なDSL
Clojureで作る"simple"なDSLKent Ohashi
 
2018年夏のPerl5
2018年夏のPerl52018年夏のPerl5
2018年夏のPerl5charsbar
 
One - Common Lispでもワンライナーしたい
One - Common LispでもワンライナーしたいOne - Common Lispでもワンライナーしたい
One - Common Lispでもワンライナーしたいt-sin
 
Node.js Error & Debug Leveling
Node.js Error & Debug LevelingNode.js Error & Debug Leveling
Node.js Error & Debug Levelingkumatch kumatch
 
PHPの今とこれから 2013
PHPの今とこれから 2013PHPの今とこれから 2013
PHPの今とこれから 2013Rui Hirokawa
 
【簡単テキストマイニング】歌詞から作品世界の魅力を探る
【簡単テキストマイニング】歌詞から作品世界の魅力を探る【簡単テキストマイニング】歌詞から作品世界の魅力を探る
【簡単テキストマイニング】歌詞から作品世界の魅力を探るShow T
 
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasiaモダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia鉄次 尾形
 
awk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyoawk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011TokyoRyuichi Ueda
 

Mais procurados (20)

How to debug a perl script using gdb
How to debug a perl script using gdbHow to debug a perl script using gdb
How to debug a perl script using gdb
 
Local php-100828 2
Local php-100828 2Local php-100828 2
Local php-100828 2
 
Traitsについて
TraitsについてTraitsについて
Traitsについて
 
from old Java to modern Java
from old Java to modern Javafrom old Java to modern Java
from old Java to modern Java
 
ocamloptの全体像
ocamloptの全体像ocamloptの全体像
ocamloptの全体像
 
Lisp batton - Common LISP
Lisp batton - Common LISPLisp batton - Common LISP
Lisp batton - Common LISP
 
Kotlin勉強会 in ehime
Kotlin勉強会 in ehimeKotlin勉強会 in ehime
Kotlin勉強会 in ehime
 
Clojureで作る"simple"なDSL
Clojureで作る"simple"なDSLClojureで作る"simple"なDSL
Clojureで作る"simple"なDSL
 
2018年夏のPerl5
2018年夏のPerl52018年夏のPerl5
2018年夏のPerl5
 
One - Common Lispでもワンライナーしたい
One - Common LispでもワンライナーしたいOne - Common Lispでもワンライナーしたい
One - Common Lispでもワンライナーしたい
 
Perl勉強会#2資料
Perl勉強会#2資料Perl勉強会#2資料
Perl勉強会#2資料
 
Node.js Error & Debug Leveling
Node.js Error & Debug LevelingNode.js Error & Debug Leveling
Node.js Error & Debug Leveling
 
PHPの今とこれから 2013
PHPの今とこれから 2013PHPの今とこれから 2013
PHPの今とこれから 2013
 
【簡単テキストマイニング】歌詞から作品世界の魅力を探る
【簡単テキストマイニング】歌詞から作品世界の魅力を探る【簡単テキストマイニング】歌詞から作品世界の魅力を探る
【簡単テキストマイニング】歌詞から作品世界の魅力を探る
 
Haskell で CLI
Haskell で CLIHaskell で CLI
Haskell で CLI
 
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasiaモダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia
 
about Perl5.10
about Perl5.10about Perl5.10
about Perl5.10
 
Write up reverse200
Write up reverse200Write up reverse200
Write up reverse200
 
awk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyoawk v.s. bashどっちが強い?@OSC2011Tokyo
awk v.s. bashどっちが強い?@OSC2011Tokyo
 
HHVM Hack
HHVM HackHHVM Hack
HHVM Hack
 

Semelhante a 20年越しで Perl 4 to 5 した話

私がPerlを使う理由
私がPerlを使う理由私がPerlを使う理由
私がPerlを使う理由Yohei Azekatsu
 
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarSotaro Karasawa
 
詳説ぺちぺち
詳説ぺちぺち詳説ぺちぺち
詳説ぺちぺちdo_aki
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方Soudai Sone
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみようKentaro Matsui
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Ransui Iso
 
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数Wataru Terada
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法博文 斉藤
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development lifeUehara Junji
 
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia鉄次 尾形
 
Perl6で遊ぼう
Perl6で遊ぼうPerl6で遊ぼう
Perl6で遊ぼうVienosNotes
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Ransui Iso
 
Perlで伝統芸能
Perlで伝統芸能Perlで伝統芸能
Perlで伝統芸能hitode909
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミングlestrrat
 

Semelhante a 20年越しで Perl 4 to 5 した話 (20)

Go guide for Java programmer
Go guide for Java programmerGo guide for Java programmer
Go guide for Java programmer
 
私がPerlを使う理由
私がPerlを使う理由私がPerlを使う理由
私がPerlを使う理由
 
Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
 
詳説ぺちぺち
詳説ぺちぺち詳説ぺちぺち
詳説ぺちぺち
 
WCO2012「PHP教室」
WCO2012「PHP教室」WCO2012「PHP教室」
WCO2012「PHP教室」
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
 
知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数知ってるようで意外と知らないPHPの便利関数
知ってるようで意外と知らないPHPの便利関数
 
Niigata.pm #1
Niigata.pm #1Niigata.pm #1
Niigata.pm #1
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development life
 
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia
 
Okinawapm #1
Okinawapm #1Okinawapm #1
Okinawapm #1
 
Perl6で遊ぼう
Perl6で遊ぼうPerl6で遊ぼう
Perl6で遊ぼう
 
node-perl
node-perlnode-perl
node-perl
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
 
Perlで伝統芸能
Perlで伝統芸能Perlで伝統芸能
Perlで伝統芸能
 
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/
  • 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

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n