यदि पर्ल में एक स्ट्रिंग खाली है, तो यह जांचने का उचित तरीका क्या है?


95

मैं इस कोड का उपयोग कर रहा हूं कि यह जांचने के लिए कि क्या एक स्ट्रिंग खाली है:

if ($str == "")
{
  // ...
}

और नहीं ऑपरेटर के बराबर भी ...

if ($str != "")
{
  // ...
}

यह काम लगता है (मुझे लगता है), लेकिन मुझे यकीन नहीं है कि यह सही तरीका है, या यदि कोई अप्रत्याशित कमियां हैं। कुछ बस इसके बारे में सही महसूस नहीं करता है।

जवाबों:


134

पर्ल में स्ट्रिंग तुलना के लिए, का उपयोग करें eqया ne:

if ($str eq "")
{
  // ...
}

==और !=ऑपरेटर हैं संख्यात्मक तुलना ऑपरेटरों। वे तुलना करने से पहले दोनों ऑपरेंड को पूर्णांक में बदलने का प्रयास करेंगे।

देखें perlop अधिक जानकारी के लिए पेज।


हाँ, इसका उपयोग करते हुए आपको सतर्क रहने की आवश्यकता है कि यदि यह अपरिभाषित है, और यदि आप चेतावनियों का उपयोग कर रहे हैं तो आपको रनटाइम चेतावनी मिलेगी। हालांकि चेतावनी के आसपास पाने के कई तरीके।
इवान कैरोल

90
  1. जिस तरह से तार को पर्ल में संग्रहीत किया जाता है, उसके कारण स्ट्रिंग की लंबाई को अनुकूलित किया जाता है।
    if (length $str)यह जाँचने का एक अच्छा तरीका है कि एक स्ट्रिंग गैर-रिक्त है।

  2. यदि आप ऐसी स्थिति में हैं, जहाँ आपने पहले से ही पहरा नहीं दिया है undef, तो "गैर-रिक्त" के लिए कैच-ऑल जो चेतावनी नहीं देगा if (defined $str and length $str)


6
मुझे लगता है कि लंबाई निकटतम परीक्षण है जो हमें इस विचार की अभिव्यक्ति के लिए है कि स्ट्रिंग में कुछ भी नहीं है।
ब्रायन डी फ़ो

6
अपवाहित क्योंकि if (length($str))एक अच्छा दृष्टिकोण है और विफल नहीं है अगर चर को परिभाषित नहीं किया गया है।
बेसिक 6

10

आप शायद "==" के बजाय "eq" का उपयोग करना चाहते हैं। यदि आप कुछ किनारे के मामलों के बारे में चिंता करते हैं, तो आप अपरिभाषित की जाँच करना चाहते हैं:

if (not defined $str) {

# this variable is undefined

}

1
बहुत उपयोगी है जब आपने एक सरणी को स्थानांतरित करके स्ट्रिंग प्राप्त किया जिसमें 0 तत्व हो सकते हैं।
डैकव १३'११

9

जैसा कि पहले ही कई लोगों ने उल्लेख किया है, eqयहां सही ऑपरेटर है।

यदि आप use warnings;अपनी स्क्रिप्ट में हैं, तो आपको इसके बारे में चेतावनी मिलेगी (और कई अन्य उपयोगी चीजें); मैं भी सलाह देंगे use strict;


+1 कूल, हाँ, मैं आमतौर पर उपयोग करता हूं, use strictलेकिन मैं कुछ पुराने कोड अपडेट कर रहा हूं, इसलिए जब मैं इसे जोड़ता हूं तो मुझे सैकड़ों त्रुटियां मिलती हैं। मैं शायद उन्हें किसी दिन ठीक कर दूँगा।
निक बोल्टन

4

CPAN का उपयोग करने के अलावा कुछ भी करने के "उचित" तरीके की अवधारणा, पर्ल में मौजूद नहीं है।

वैसे भी जो न्यूमेरिक ऑपरेटर हैं, आपको उपयोग करना चाहिए

if($foo eq "")

या

if(length($foo) == 0)

3
यह सच है कि पर्ल समस्या को हल करने की दिशा में "एक सही तरीका" की वकालत नहीं करता है, लेकिन इसका मतलब यह नहीं है कि वहाँ दृढ़ता से पसंदीदा मुहावरों और शैलियों और दृष्टिकोण नहीं हैं। साथ ही, जैसा कि पर्ल नियमित में से एक को बहुत कुछ कहना पसंद है, भले ही चीजों को करने का एक से अधिक तरीका हो, चीजों को करने के कुछ तरीके वास्तव में बहुत बुरे हैं (बेवकूफ, बीमार-सलाह, कड़ी मेहनत से बनाए रखने, आदि) ।)
टेलीमेकस

2
सिर्फ इसलिए कि ऐसा करने के कई तरीके हैं, इसका मतलब यह नहीं है कि सभी तरीके समान हैं। if ($foo == "")उदाहरण के लिए, खाली तारों के परीक्षण , निश्चित रूप से गलत है, जब तक कि आप वास्तव में परीक्षण के लिए नहीं हैं $foo, तो संख्यात्मक संदर्भ में मूल्यांकन किया गया है, का मान 0 है (जिस स्थिति में यह अभी भी बेहतर लिखा जाएगा if ($foo == 0), क्योंकि यह अधिक स्पष्ट रूप से आपके व्यक्त करता है आशय)।
डेव शेरोमैन

0

एक खाली स्ट्रिंग की जाँच करने के लिए आप कुछ इस प्रकार कर सकते हैं

if (!defined $val || $val eq '')
{
    # empty
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.