ああ、「?」の存在を忘れていました。 そうそう if ($val =~ /^(-|\+|)\d+\.?\d*(E\+\d+|E\-\d+)?$/i){ だと、 -1.E+12 というのも引っかかります。 もちろんPerlとしては数値として扱われるので大丈夫ですが。 しかし、 -.5E+12 というのもPerl的には正しいはずなのに、こちらは引っかかりません。 -12E-4.5 -12E-.5 これらも正しいのにだめです。 どこまでのを求めますか?(^^; if ($val =~ /^(-|\+)?(\d+\.?\d*|\d*\.?\d+)(E\+(\d+\.?\d*|\d*\.?\d+)|E\-(\d+\.?\d*|\d*\.?\d+))?$/i){ こうかもしれない・・・