計算機メモ目次 (目的のページと内容が一致しない場合, 目次から探してください)

さくらレンタルサーバの fml 4 の makefml プログラムを Perl 5.32 で動くように修正する


問題
  さくらレンタルサーバの Perl を最新版 5.32 に変更したところ
  メーリングリストプログラム fml 4 の makefml プログラムが動かなくなった.

参考
  http://www.unknown24.net/bbrk/20141229/fml

原因
  Perl の2つの仕様変更のため.
  その1
    getopt.pl がなくなり Getopt::Std モジュールに含まれる getopts 関数になった.
  その2
    関数 defined が仕様変更で未定義のスカラ値のみを引数に取るようになったため
    配列やハッシュを defined に渡している部分がエラーになった.

修正
  $HOME/fml/makefml と $HOME/fml/cf/config の2つ.
  以下それぞれの差分.

% diff $HOME/fml/makefml.orig $HOME/fml/makefml
139,140c139,140
<     require 'getopts.pl';
<     &Getopts("adhf:A:O:p:D:vwV:mi:u:UFE:W:c:");
---
>     use Getopt::Std;
>     getopts('dhf:A:O:p:D:vwV:mi:u:UF');
6358c6358
< 	    if (defined @entry) {
---
> 	    if (@entry) {
6367c6367
< 		 $key ne "_$package" && $key ne "_DB" && defined %entry
---
> 		 $key ne "_$package" && $key ne "_DB" && %entry
6372c6372
< 		 (defined %entry) && 
---
> 		 (%entry) && 

% diff $HOME/fml/cf/config.orig $HOME/fml/cf/config
20,21c20,21
< require 'getopts.pl';
< &Getopts("m:hdDr:csnfrFiI:v");
---
> use Getopt::Std;
> getopts('m:hdDr:csnfrFI:v');
660c660
< 	    elsif (defined @entry) {
---
> 	    elsif (@entry) {
663c663
< 	    elsif (defined %entry) {
---
> 	    elsif (%entry) {
706c706
< 	if (defined @entry) {
---
> 	if (@entry) {
721c721
< 	if ($key ne "_$package" && defined %entry) {
---
> 	if ($key ne "_$package" && %entry) {
794c794
< 	elsif (defined @entry) {
---
> 	elsif (@entry) {
797c797
< 	elsif ($key ne "_$package" && $key ne "_DB" && defined %entry) {
---
> 	elsif ($key ne "_$package" && $key ne "_DB" && %entry) {



計算機メモ目次 (目的のページと内容が一致しない場合, 目次から探してください)
海洋大循環分野
daigo@ocg.aori.u-tokyo.ac.jp