のような文字列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
、これらの文字列を削除することも検討してください。Inf
Infinity
warn "Please enter a whole number for the quantity"
unless looks_like_number( $fields{quantity} )
&& $fields{quantity} !~ /Inf|NaN/i
&& $fields{quantity} > 0;