Perl 5.12へのアップグレードで split の挙動が変わってびっくり

昼から機械翻訳の勉強会。shuhei-k くんが

  • Steve DeNeefe and Kevin Knight. Synchronous Tree Adjoining Machine Translation. EMNLP 2009.

について紹介してくれる。Stochastic Tree Adjoining Grammarについてあまり詳しくないので勉強になった。しかしこれなら Combinatorial Categorial Grammar でいいような?

実は先週末大学が停電で研究室のサーパ類のアップグレードを計算機係の人たちが敢行してくれたのだが、自分はウェブサーバのアップデートを実行し、Perl のバージョンが5.10から5.12に上がったのだが、どうせ互換性を大事にする Perl だし問題なかろう、と思っていたら、@tettsyunくんから動かなくなったプログラムがある、と言われてびっくり。(ちなみに動かなくなったのはWDBというウェブの巡回プログラム)

Perl デバッガを使って @tettsyun くんが深追いしてくれたことには、どうも split の挙動が変わってしまったようで、split のスカラコンテクストで結果が @_ に入っていたのが入らなくなったようだ。具体的に動かなくなったのは

        split( /:[ \t]+/ );
        if ( @_[1] eq "" ) {

となっている部分で、@_[1]というのは@_にsplitの結果が入っていることを期待しているのだが、入らなくなってしまったのが問題のようであった。従って、

        my @array = split( /:[ \t]+/ );
        if ( $array[1] eq "" ) {

のようにいったん変数に入れておけばよい。

問題が分かってみると直すのは簡単なのだが、調べてみると実は有名な問題だったらしい……(たとえばこことか) Python とか Ruby で問題が起きるならいかにもなので気をつけるのだが、Perl でこんな問題が起きるとは! (もしやすでに Perl を使っている人が少ないからあまり問題にならないということ?)

D1のとき、「自分は3年後には研究室にいないだろう」と思って計算機係を引退し、それまで Gentoo だった計算環境サーバ類を Ubuntu に入れ替えてもらった(この判断は正しかったと思う)のだが、ウェブサーバだけは更新するのも面倒だしずっと Gentoo のままであり、こういうことが起きないと思っていたのでびっくりした。(ちなみにデモで影響があるために CaboCha のバージョンも古いものを入れているし、文字コードも過去との互換性を重視して EUC-JP がデフォルトであり、バージョン更新で影響がありそうなものは極力上げないようにしていたのだが) ウェブサーバも自分がいるうちに Gentoo 以外にしたほうがいいんじゃないかと思う。

また、研究室内で Ubuntu が8.04と9.04と混在していたのを10.04.1に更新してくれたようだが、aptだけで簡単にアップグレードできるのかと思いきや、(8.04からのアップグレードはスムーズに行ったのに)9.04からのアップグレードはクリーンインストールすることになったりして、いろいろ難しいものである。(いま研究室のユーザ向けサーバは10台以上あるのでメンテナンスも大変)

ちなみに以前 Fedora がたくさんいたときは落ちまくって Gentoo にしたのだが、Ubuntu も研究室の計算環境のサーバとの相性が悪くて導入当初は負荷をかけるとおもしろいように落ちたものである。9.04に更新してからは安定してきたが、いまでも高負荷にすると落ちるのは勘弁してほしい。東大の教育用計算機システムで実際にあったこと(下の方までスクロールしてほしい)だが、

(事例) 学生Aが「端末のしぼうするぷろぐらむ」 を友人からもらい(強調引用者)実行した. これは,サーバに負荷をかけて使用不能にするもので, 同じサーバを利用していたユーザ数十人が影響をうけた.

というのと同じようなことが研究室で周期的に(1-2年置きくらい)起きるので、もらったプログラムでも自分で書いたプログラムでもよいのだが、少なくともなにをやるプログラムなのか理解して、大規模に実行する前に小規模データで実験して終了時間の見積もりを取るとか、メモリ/CPUを占有しすぎないように気をつけるとか(お互い気をつけて)してほしいものである。masayu-a さん曰く「ITC の環境使ってねでいいじゃん」ということで、それもその通りかも……

計算機のメンテナンス、大変な割には日頃全然感謝されないものなので、ちょっと気の毒であるが、感謝している人もいるので、くじけずにがんばってほしい。