okkyの日記: Excel::Writer::XLSX の Warning 1
「ほとんどインターフェースは変わらないよ」
とあるので、とりあえず既存のプログラムを一つ Excel::Writer::XLSX に入れ替えてみた。するとワーニングが出まくる。
Use of uninitialized value $date_time in substitution (s///) at /usr/lib/perl5/site_perl/5.10/Excel/Writer/XLSX/Worksheet.pm line 2666, <STDIN> line 87.
Use of uninitialized value $date_time in substitution (s///) at /usr/lib/perl5/site_perl/5.10/Excel/Writer/XLSX/Worksheet.pm line 2667, <STDIN> line 87.
Use of uninitialized value $date_time in pattern match (m//) at /usr/lib/perl5/site_perl/5.10/Excel/Writer/XLSX/Worksheet.pm line 2670, <STDIN> line 87.
Use of uninitialized value $date_time in pattern match (m//) at /usr/lib/perl5/site_perl/5.10/Excel/Writer/XLSX/Worksheet.pm line 2673, <STDIN> line 87.
Use of uninitialized value $str in length at /usr/lib/perl5/site_perl/5.10/Excel/Writer/XLSX/Worksheet.pm line 2094, <STDIN> line 87.
Use of uninitialized value $str in exists at /usr/lib/perl5/site_perl/5.10/Excel/Writer/XLSX/Worksheet.pm line 4200, <STDIN> line 87.
Use of uninitialized value $str in hash element at /usr/lib/perl5/site_perl/5.10/Excel/Writer/XLSX/Worksheet.pm line 4201, <STDIN> line 87.
Use of uninitialized value $str in hash element at /usr/lib/perl5/site_perl/5.10/Excel/Writer/XLSX/Worksheet.pm line 4205, <STDIN> line 87.
え??! というのでとりあえず、Worksheet.pm line 2666 の辺りを調べてみた。
sub convert_date_time {
my $self = shift;
my $date_time = $_[0];
my $days = 0; # Number of days since epoch
my $seconds = 0; # Time expressed as fraction of 24h hours in seconds
my ( $year, $month, $day );
my ( $hour, $min, $sec );
# Strip leading and trailing whitespace.
$date_time =~ s/^\s+//; <-- line 2666
$date_time =~ s/\s+$//;
あれ?? というわけで convert_date_time の引数を調べてみると、
###############################################################################
#
# convert_date_time($date_time_string)
#
引数一個だよねぇ。で、最初の引数を
my $self = shift;
って $self に入れたら…その次の行の
my $date_time = $_[0];
…これって何を参照しているの??
というわけで、存在しない第2引数に対して正規表現を掛けまくっているから warning がでるんだ、と言うのは判った。が、そうなると「前」はどうだったのか…というわけで Spreadsheet::WriteExcel の方を調べる:
sub convert_date_time {
my $self = shift;
my $date_time = $_[0];
my $days = 0; # Number of days since epoch
my $seconds = 0; # Time expressed as fraction of 24h hours in seconds
my ($year, $month, $day);
my ($hour, $min, $sec);
# Strip leading and trailing whitespace.
$date_time =~ s/^\s+//; <---- これや!
$date_time =~ s/\s+$//;
?? おんなじやん。ちなみに引数が1つしかないのも変わらない。
なんで前は問題なくて今回は問題が????
というわけで上の方を調べてみた。
Exce::Writer::XLSX
:
# perltidy with the following options: -mbl=2 -pt=0 -nola
use 5.008002;
use strict;
use warnings;
use Carp;
use File::Temp 'tempfile';
Spreadsheet::WriteExcel
:
#
use Exporter;
use strict;
use Carp;
!! use warnings; がないっ!! これや!!
というわけで、どうやら、かなり古いバグがある事が判った。 orz
苦労した甲斐の無さが…
スクリプトを小さくすると再現しない… (スコア:1)
何だかわからない…サンプルコードを書こうとしたら、障害が再現しなくなった。
のみならず perl -d で動かしても再現しない…
こういうときは放置するに限る。
というわけで、何か思いつくまで放置プレイ。
fjの教祖様