原因の部分が判明したのですが、どこが悪いのかがわかりません。
かたちは変えずに修正できるのでしょうか。わかる方お願いいたします。
文中の「$time = timelocal(0, $min, $h, $d, $Mon{$m} - 1, $y);」の部分についてエラーがでます。
# メールの Date から time 値を取得する
sub xxx_get_mail_time{
use Time::Local;
my($da)=@_;
if ($da eq "") {return time;} ## パラメータ空の場合は現在を返す
my($w,$d,$m,$y,$t,$nd,$canma,$find,$wd,,$h,$min,$sec,$nh);
%Mon = ("Jan",1,"Feb",2,"Mar",3,"Apr",4,
"May",5,"Jun",6,"Jul",7,"Aug",8,
"Sep",9,"Oct",10,"Nov",11,"Dec",12);
chomp $da;
$canma = ",";
$find = index ($da, $canma);
if ($find >= 0) {
($w,$d,$m,$y,$t) = split(/ /,$da);
$wd = substr($w,0,3);
}
else{
($d,$m,$y,$t) = split(/ /,$da);
}
if(length($d)==1){
$nd = "0".$d;
}
else{
$nd = $d;
}
$d =~s/^[0]//;
($h,$min,$sec) = split(/:/,$t);
$h =~s/^[0]//;
$min =~s/^[0]//;
$sec =~s/^[0]//;
my $time;
$time = timelocal(0, $min, $h, $d, $Mon{$m} - 1, $y);
return $time;
}
【変更点】
コメント欄に同じですが、ハッシュのほうの値を最初からゼロにしておけば、
引き算するという手間がなくなり処理が早くなります
%Mon = ("Jan",0,"Feb",1,"Mar",2,"Apr",3,"May",4,"Jun",5,"Jul",6,"Aug",7,"Sep",8,"Oct",9,"Nov",10,"Dec",11); $time = timelocal(0, $min, $h, $d, $Mon{$m}, $y);
【追加点】
年は1900年基準で計算しますので1900を引く必要があります
$y -= 1900;
windofjulyさん
2012/02/11 01:31:31> 年は1900年基準で計算しますので1900を引く必要があります
必要がない限り、今後は4桁の西暦をそのまま渡すといいようです。
http://www.h3.dion.ne.jp/~sakatsu/Perl/Notes_Perl_timegm_timelocal.htm
※少ししか確認していないので、解釈間違いがあったらすみません・・・
rouge_2008 さん
2012/02/11 01:52:342038年問題への対応状況の確認(perlのバージョン確認)は必須でした・・・
あと・・・エラーコメントの確認も・・・
コメントありがとうございました
手っ取り早いのは、$daや、$min, $h, $d, $Mon{$m}, $yの内容をプリントアウトして、
timelocalに正しいパラメータを送れているかどうかを確認してもらうことですが・・・
応答無いので、どうしたものか・・・