2013-02-14 14 views
9

मुझे लगता है कि look_like_number वास्तव में सही/झूठा नहीं लौटाता जैसा कि मैंने माना था, लेकिन वास्तव में एक बाइट लौटाता है जो कि पार्ल आंतरिक आंतरिक संख्या का प्रकार स्केलर में संग्रहीत होता है।स्केलर :: look_like_number लौटने वाले नंबर प्रकार

perl -e'use Scalar::Util qw/looks_like_number/; for (qw/ 1 3 10 34.23 545435.234 2343.0 234 -1423 1sddf -865178652134876152348761253487613254 sdf 24363456345636534563567253765734655 8764325hjkh435 iuh340874 &*^*& 786521948761324876132497821347816.23452345 -8762135487126387432.12435154243 0 nan inf/) { print $_, ": ", looks_like_number($_), "\n" } ' 
1: 1 
3: 1 
10: 1 
34.23: 5 
545435.234: 5 
2343.0: 5 
234: 1 
-1423: 9 
1sddf: 0 
-865178652134876152348761253487613254: 10 
sdf: 0 
24363456345636534563567253765734655: 2 
8764325hjkh435: 0 
iuh340874: 0 
&*^*&: 0 
786521948761324876132497821347816.23452345: 6 
-8762135487126387432.12435154243: 14 
0: 1 
nan: 36 
inf: 20 

यह वास्तव में अदिश :: util है कि मैं पा सकते हैं, perlapi के looks_like_number मूल्य, जो भी दस्तावेज में नहीं है लौटने इसके बारे में सिर्फ एक उल्लेख में दर्ज नहीं कर रहा है: उदाहरण के लिए। एक नज़र में, यह प्रतीत होता है:

  • & 1 = सांख्यिक
  • & 2 = 64 बिट
  • & 4 = चल बिन्दु
  • & 8 = नकारात्मक
  • & 16 = अनंत
  • & 32 = संख्या

क्या ये मास्क पोर्टेबल और कोड में उपयोग करने के लिए सुरक्षित हैं?

+0

इसके लिए 'look_like_number() 'के लायक होने के लिए, कम से कम लिनक्स 32-बिट पर 5.8 के बाद से सभी स्थिर perls पर आपके नमूना इनपुट के लिए समान मान वापस आते हैं। बेशक, आपके प्रश्न का समझदार उत्तर अभी भी "नहीं" है। – pilcrow

+0

स्केलर के रूप में :: 1.3 9 तक, यह बदल दिया गया है, और 'look_like_number' हमेशा' PL_yes' या 'PL_no' (यानी' !! 1' या '!! 0') देता है। – tobyink

उत्तर

5

नहीं, अगर वे दस्तावेज नहीं हैं, तो वे परिवर्तन के अधीन हैं। और "संख्यात्मक" और "64 बिट" वास्तव में उन झंडे के पर्याप्त विवरण नहीं हैं। वे क्या करते हैं, विशेष रूप से पर्ल कोड में जानना उपयोगी नहीं लगता है।

आप किस समस्या को हल करने की कोशिश कर रहे हैं?

+0

हाँ, वास्तविक या बड़ा शायद सी के मेरे अस्पष्ट स्मरण से बेहतर है। मैं इनपुट के रूप में इनपुट को सत्यापित करने की कोशिश कर रहा हूं, और शायद इसे/^ \ d + $/ – Oesor

+0

http: // के खिलाफ चलाने के बजाए समयपूर्व अनुकूलन कर रहा हूं। forums.xkcd.com/viewtopic.php?f=7&t=100204#p3270122 - हो सकता है कि आप '[0-9] + '(या' 5.14+ में '/ a' संशोधक का उपयोग करें) – ysth

+0

और यही कारण है कि मैं देख रहा था पहली जगह में एक गैर-विधि विधि: पी। – Oesor

1

अनियंत्रित व्यवहार पर भरोसा न करें, वापसी मूल्य पर्ल के आंतरिक से जुड़ा हुआ है, यह भविष्य में (और संभवतः) बदल सकता है; यह आपकी स्क्रिप्ट पर चल रहे प्लेटफ़ॉर्म/आर्किटेक्चर के आधार पर अलग-अलग हो सकता है!

यदि आप NaN, अनंत या नकारात्मक शून्य के लिए परीक्षण करना चाहते हैं, तो this question देखें।

संबंधित मुद्दे