मूल प्रश्न यह था कि कैसे बताया जाए कि एक चर संख्यात्मक था, यदि यह "संख्यात्मक मान" नहीं है।
कुछ ऑपरेटर ऐसे होते हैं जिनके पास संख्यात्मक और स्ट्रिंग ऑपरेंड्स के लिए ऑपरेशन के अलग-अलग मोड होते हैं, जहां "न्यूमेरिक" का अर्थ होता है, जो मूल रूप से एक नंबर था या कभी संख्यात्मक संदर्भ में उपयोग किया गया था (उदाहरण के लिए $x = "123"; 0+$x
, इसके अलावा, $x
एक स्ट्रिंग है, बाद में यह एक स्ट्रिंग है) संख्यात्मक माना जाता है)।
यह बताने का एक तरीका है:
if ( length( do { no warnings "numeric"; $x & "" } ) ) {
print "$x is numeric\n";
}
यदि बिटवाइज़ सुविधा सक्षम है, तो यह &
केवल एक संख्यात्मक ऑपरेटर बनाता है और एक अलग स्ट्रिंग &.
ऑपरेटर जोड़ता है , आपको इसे अक्षम करना होगा:
if ( length( do { no if $] >= 5.022, "feature", "bitwise"; no warnings "numeric"; $x & "" } ) ) {
print "$x is numeric\n";
}
(बिटवाइज, प्रति 5.0 5.0 और उससे अधिक में उपलब्ध है, और यदि आप use 5.028;
या इससे अधिक डिफ़ॉल्ट रूप से सक्षम हैं ।)
perldoc perlapi
हमें बताता है: टेस्ट यदि एसवी की सामग्री एक संख्या (या एक संख्या) की तरह दिखती है। "Inf" और "Infinity" को संख्याओं के रूप में माना जाता है (इसलिए गैर-संख्यात्मक चेतावनी जारी नहीं करेगा), भले ही आपका एटॉफ़ () उन्हें ग्रो नहीं करता है। शायद ही एक परीक्षण योग्य युक्ति ...