perl - मैं पर्ल में बूलियन चर का उपयोग कैसे करूं?




boolean (6)

मैं प्रयास कर चुका हूं:

$var = false;
$var = FALSE;
$var = False;

इनमें से कोई भी काम नहीं। मुझे त्रुटि संदेश मिलता है

Bareword "false" not allowed while "strict subs" is in use.

झूठी की सबसे पूर्ण, संक्षिप्त परिभाषा मैं आ गई है:

कुछ भी जो खाली स्ट्रिंग या स्ट्रिंग `0` को स्ट्रिंग करता है वह गलत है। बाकी सब कुछ सच है।

इसलिए, निम्नलिखित मान झूठे हैं:

  • खाली स्ट्रिंग
  • संख्यात्मक मान शून्य
  • एक अपरिभाषित मूल्य
  • एक ओवरलोडेड बूलियन ऑपरेटर वाला एक ऑब्जेक्ट जो उपरोक्त में से किसी एक का मूल्यांकन करता है।
  • एक जादुई चर जो उपर्युक्त में से किसी एक को प्राप्त करने का मूल्यांकन करता है।

ध्यान रखें कि एक खाली सूची शाब्दिक मूल्यांकन स्केलर संदर्भ में एक अपरिभाषित मान के लिए मूल्यांकन करता है, इसलिए यह कुछ गलत का मूल्यांकन करता है।

"असली शून्य" पर एक नोट

जबकि 0 स्ट्रिंग करने वाली संख्याएं झूठी हैं, स्ट्रिंग जो शून्य पर गिने जाते हैं, जरूरी नहीं हैं। केवल झूठी तार 0 और खाली स्ट्रिंग हैं। कोई अन्य स्ट्रिंग, भले ही यह शून्य पर गिना जाए, सत्य है।

निम्नलिखित तार हैं जो एक बुलियन और शून्य के रूप में सत्य हैं।

  • एक चेतावनी के बिना:
    • "0.0"
    • "0E0"
    • "00"
    • "+0"
    • "-0"
    • " 0"
    • "0\n"
    • ".0"
    • "0."
    • "0 but true"
    • "\t00"
    • "\n0e1"
    • "+0.e-9"
  • एक चेतावनी के साथ:
    • कोई भी स्ट्रिंग जिसके लिए Scalar::Util::looks_like_number झूठी रिटर्न देता है। (उदाहरण के लिए "abc" )

निम्न फ़ाइल उपसर्ग का उपयोग करें, यह आपके पर्ल स्क्रिप्ट eTRUE और eFALSE में जोड़ देगा, यह वास्तव में वास्तविक (!) सत्य और गलत होगा (जैसे जावा)

#!/usr/bin/perl
use strict;
use warnings;

use constant { #real true false, compatible with encode_json decode_json for later (we don't want field:false... will be field:0...)
                eTRUE  =>  bless( do{\(my $o = 1)}, 'JSON::PP::Boolean' ),
                eFALSE =>  bless( do{\(my $o = 0)}, 'JSON::PP::Boolean' )
             };

वास्तव में, कुछ कारण हैं कि आपको इसका उपयोग क्यों करना चाहिए।

मेरा कारण यह है कि JSON के साथ काम करते हुए, मुझे 0 और 1 को कुंजी के मान के रूप में मिला है, लेकिन यह हैक यह सुनिश्चित करेगा कि आपकी स्क्रिप्ट के साथ सही मान रखा जाए।


पर्ल में, निम्नलिखित सशर्त में झूठे का मूल्यांकन करते हैं:

0
'0'
undef
''  # Empty scalar
()  # Empty list
('')

बाकी सच हैं। true या false लिए कोई शब्द नहीं हैं।


बूलियन मूल्यों के लिए bobf द्वारा दिए गए सुंदर स्पष्टीकरण: सही या गलत? एक त्वरित संदर्भ गाइड

विभिन्न मूल्यों के लिए सत्य परीक्षण

                       Result of the expression when $var is:

Expression          | 1      | '0.0'  | a string | 0     | empty str | undef
--------------------+--------+--------+----------+-------+-----------+-------
if( $var )          | true   | true   | true     | false | false     | false
if( defined $var )  | true   | true   | true     | true  | true      | false
if( $var eq '' )    | false  | false  | false    | false | true      | true
if( $var == 0 )     | false  | true   | true     | true  | true      | true

मैं use boolean; की सलाह देते use boolean; । हालांकि आपको सीपीएन से boolean मॉड्यूल स्थापित करना होगा।


मैं एक tutorial आया जिसमें पर्ल में कौन से मूल्य सत्य और गलत हैं, इस बारे में अच्छी तरह से व्याख्या है। यह बताता है कि:

स्केलर मानों के बाद झूठी माना जाता है:

  • अपरिभाषित - अपरिभाषित मूल्य
  • 0 संख्या 0, भले ही आप इसे 000 या 0.0 के रूप में लिखते हैं
  • खाली स्ट्रिंग।
  • '0' स्ट्रिंग जिसमें एक एकल 0 अंक होता है।

निम्नलिखित सहित सभी अन्य स्केलर मान सत्य हैं:

  • 1 कोई गैर-संख्या संख्या
  • ' ' इसमें एक जगह के साथ स्ट्रिंग
  • एक स्ट्रिंग में '00' दो या दो से अधिक वर्ण
  • "0\n" 0 एक न्यूलाइन के बाद
  • 'true'
  • 'false' हां, यहां तक ​​कि स्ट्रिंग 'झूठी' भी सत्य का मूल्यांकन करती है।

एक और अच्छा ट्यूटोरियल है जो पर्ल के बारे में स्पष्ट और गलत बताता है।







boolean