のような文字列1E4も数値であるため、すべての数値に[0-9]のみを含める必要はありません。
looks_like_numberによって提供される関数はScalar::Util、変数が数値であるかどうかをチェックする正しい方法です。
use Scalar::Util 'looks_like_number';
if ( not looks_like_number( $fields{quantity} ) or $fields{quantity} <= 0 ) {
warn "Please enter a whole number for the quantity";
}
同じことをもっと簡潔に:
warn "Please enter a whole number for the quantity"
unless looks_like_number( $fields{quantity} )
&& $fields{quantity} > 0;
のような文字列は数値と見なされるためNan、これらの文字列を削除することも検討してください。InfInfinity
warn "Please enter a whole number for the quantity"
unless looks_like_number( $fields{quantity} )
&& $fields{quantity} !~ /Inf|NaN/i
&& $fields{quantity} > 0;