2015年12月21日月曜日

fml 4をperl 5.16で動作させる

FreeBSDでパッケージをアップデートしているときに、ふとperlを5.16にしてしまったところ、メーリングリスト管理ソフトウェアfml 4.0でエラーができるようになりました。

同じようなことで困っている人がいないか探してみると、次のWWWページを見つけました。
fml の makefml がエラー 
http://www.unknown24.net/bbrk/20141229/fml
エラーメッセージは次のような感じです。
$ ./makefml
defined(@array) is deprecated at ./makefml line 4357.
(Maybe you should just omit the defined()?)……
このWWWページにあるようにperlのソースを変更することで、動作するようになりました。以下に、変更を引用します。
  • getoptsのあたり
    require 'getopts.pl';
    getopts('dhf:A:O:p:D:vwV:mi:u:UF');

    use Getopt::Std; Getopts("dhf:A:O:p:D:vwV:mi:u:UF"); 
  • definedのあたり
    if (defined @entry) {

    if (@entry) {
fml4は新しいperl5.22などでは動かないので、そのときには、以下のようにします。
  • システム全体のデフォルトのperlを5.22にアップデートする。
    これは/usr/local/binに入るので、perlを使うアプリケーションは基本的には/usr/local/bin/を参照するようにする。
  • 改めて/usr/port/lang/perl5.16でmake installしてperl 5.16をインストールする
    これは/usr/locak/bin/perl5.16.xなどでインストールされるので、これを参照するようにするか、/usr/bin/perlを/usr/local/bin/perl5.16.xへのシンボリックリンクとして、古いperlアプリケーションは/usr/bin/perlを参照するようにする。
  • fmlも/usr/bin/perlなどを古いperlを参照するように先頭の#!/usr/local/bin/perlを書き換える。