2009-04-07 7 views
6

मैं अपने कार्यक्रम में कोड का निम्न भाग है:मैं पर्ल में 0 और व्हाइटस्पेस के बीच अंतर कैसे कर सकता हूं?

$val = chr(someFunction()); 

if($val == " ") 
{ 
    #do something 

} 
elsif($val == 0) 
{ 
    #do something else 
} 

लेकिन जब भी 0 $ वैल में भेजा जाता है, अगर हिस्सा elsif जो मैं निष्पादित करने के लिए उम्मीद के बजाय निष्पादित करता है।

मैं इसे कैसे ठीक कर सकता हूं?

धन्यवाद।

उत्तर

23

== ऑपरेटर का उपयोग संख्यात्मक मानों की तुलना करने के लिए किया जाता है। यदि आप तारों की तुलना करना चाहते हैं, तो आपको eq ऑपरेटर का उपयोग करना चाहिए।

if ($val eq " ") ... 
+0

इसके अलावा, क्या आप वाकई यह जांचना चाहते हैं कि $ val वास्तव में एक स्पेस कैरेक्टर है या नहीं? यदि आप अपने "if" कथन की पहली शाखा को निष्पादित करने के लिए चाहते हैं, जब भी $ वैल में एक या अधिक रिक्त स्थान हों, तो इसके बजाय रेगेक्स का उपयोग करें। –

5

इसे ठीक करने के कई तरीके हैं (TIMTOWDI)। आप मानक Scalar::Util पैकेज से looks_like_a_number समारोह आयात कर सकते हैं:

if (looks_like_a_number($val) and $val == 0) { 
    #do something 
} 

आप Perl 5.10 है, तो स्ट्रिंग समानता ऑपरेटर

if ($val eq 0) { 
    #do something 
} 

इस्तेमाल कर सकते हैं, तो आप स्मार्ट मैच ऑपरेटर

if ($val ~~ 0) { 
    #do something 
} 
इस्तेमाल कर सकते हैं

और कई अन्य। आप जिस विधि का उपयोग करते हैं उस पर निर्भर करता है जो आप प्राप्त करने की कोशिश कर रहे हैं।

+0

स्पष्टीकरण के लिए बहुत बहुत धन्यवाद :) –

3

यदि आपके पास चेतावनियां सक्षम थीं, तो आपको पता चल जाएगा कि समस्या क्या थी।

भागो इस:

use strict; 
use warnings; 

my $val = chr(someFunction()); 

if($val == " ") 
{ 
    #do something 

} 
elsif($val == 0) 
{ 
    #do something else 
} 

sub someFunction { 
    return 1; 
} 

और आपको मिलता है: सी: लाइन 6 \ test.pl:> test.pl तर्क "" सेल्सियस पर संख्यात्मक eq (==) में संख्यात्मक नहीं है। तर्क "^ ए 'सेल्सियस पर संख्यात्मक eq (==) में संख्यात्मक नहीं है: \ test.pl लाइन 6.

उपयोग निदान डालने से हमें यह अतिरिक्त स्पष्टीकरण देता है:

(W numeric) The indicated string was fed as an argument to an operator 
    that expected a numeric value instead. If you're fortunate the message 
    will identify which operator was so unfortunate. 

इसलिए, चूंकि हम संख्यात्मक ईक नहीं चाहते हैं, हम स्ट्रिंग eq: eq चाहते हैं। यदि आप पहले से ही नहीं जानते थे, तो आप Equality Operators पढ़ने के लिए perldoc perlop देख सकते हैं।

यह warnings और strict pragmas का उपयोग करने का तरीका क्लासिक उदाहरण है।

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