আমি পার্লে বুলিয়ান ভেরিয়েবল কীভাবে ব্যবহার করব?


220

আমি চেষ্টা করেছি:

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

এগুলির কোনওটিই কাজ করে না। আমি ত্রুটি বার্তা পেয়েছি

"কঠোর উপকার" ব্যবহারের সময়, "বেয়ারওয়ার্ড" মিথ্যা "অনুমোদিত নয়।

37
আপনি আমার বই লার্নিং পার্ল দিয়ে শুরু করতে চাইতে পারেন । আপনি এটি সঠিক না হওয়া পর্যন্ত কী করবেন তা অনুমান করার চেয়ে সহজ (বানর, টাইপরাইটার এবং হ্যামলেট এবং এটি সমস্ত)। :)
brian d foy

উত্তর:


285

পার্লে, নিম্নলিখিতগুলি শর্তসাপেক্ষে মিথ্যাতে মূল্যায়ন করে:

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

বাকিরা সত্য। trueবা এর জন্য কোনও ন্যাওয়ার্ড নেই false


2
@ ব্লুওয়াল্ডো: কোনও স্কেলারের সাথে তুলনা করার ফলাফলগুলি তুলনা এবং নির্ধারণ করার সময় আপনি সিএমপি এবং <=> ব্যবহার করতে পারেন। $ var = $ var1 cmp $ var2; 'সিএমপি' এবং '<=>' (সংখ্যার তুলনার জন্য ব্যবহৃত) -1, 0, বা 1 প্রদান করে যদি বাম আর্গুমেন্টটি সঠিক আর্গুমেন্টের চেয়ে কম, সমান বা বড় হয়। এটি বুলিয়ান নয় তবে কখনও কখনও আপনি জানতে চাইতে পারেন যে একটি যুক্তি কেবল সমান বা সমান না হয়ে অন্যের চেয়ে সমান বা তার চেয়ে কম বা বেশি if
ব্যবহারকারী 118435

9
সমস্যা 1: একটি খালি তালিকা মিথ্যা নয়, যেহেতু কোনও তালিকা সত্য বা মিথ্যা কিনা তা পরীক্ষা করা অসম্ভব। স্কেলারের প্রসঙ্গে রিটার্নের একটি খালি তালিকা undef
ইকেগামি

4
সমস্যা 2: ('')এবং ''একই মান। আমি মনে করি আপনি খালি স্ট্রিং (এমনকী প্যারেনগুলি তালিকা তৈরি করে না) নিয়ে একটি উপাদান দিয়ে একটি তালিকা বোঝাতে চেয়েছিলেন, তবে আমি ইতিমধ্যে উল্লেখ করেছি যে তালিকাটি মিথ্যাতে সত্য কিনা তা পরীক্ষা করা অসম্ভব।
ইকেগামি

6
সমস্যা 3: একটি ওভারলোডেড বুলিয়ান অপারেটর সহ অবজেক্টগুলিও মিথ্যা হতে পারে।
ইকগামি

15
@ ইন্টারনকোড, পার্লের দুটি নির্দিষ্ট মান ব্যবহার করে যখন এটি সত্য এবং মিথ্যা প্রত্যাবর্তনের প্রয়োজন হয়, তাই কেবল এটির বুলিয়ানও নয়, এটির সত্য ( !0ওরফে PL_sv_yes) এবং মিথ্যা ( !1ওরফে PL_sv_no) রয়েছে। বা আপনি কি বলছেন যে যখনই এই দুটি মূল্যবোধ ব্যতীত অন্য কোনও কিছুর সত্যতার জন্য পরীক্ষা করা হয় তখন পার্লের ক্রাক করা উচিত? এটি সম্পূর্ণ ভয়ঙ্কর হবে। উদাহরণস্বরূপ এটি প্রতিরোধ করবে$x ||= $default;
ইকগামি

71

আমি যে মিথ্যাটি এসেছি তার সর্বাধিক সম্পূর্ণ, সংক্ষিপ্ত সংজ্ঞাটি হ'ল:

খালি স্ট্রিং বা স্ট্রিংয়ে স্ট্রিংফাইজ করা কিছু 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")

যদি আমি সঠিক শব্দ বোঝা সত্য মধ্যে যদিও সংখ্যার যে 0 stringify সত্য হওয়া উচিত মিথ্যা অথবা (বিভ্রান্তির প্রতিরোধ) মিথ্যা নির্ণয়
ব্যবহারকারী 907860

1
আপনার "সংক্ষিপ্ত" সংজ্ঞাটি আপনার দীর্ঘ ব্যাখ্যার সাথে সঙ্গতিপূর্ণ নয়। বিবেচনা করুন: my $value = do { package XXX; use overload q[""] => sub { "XXX" }, q[bool] => sub { 0 }; bless [] };। এখন $value"XXX" এ স্ট্রিংফাই হবে তবে মিথ্যাতে উত্সাহিত হবে।
tobyink

1
@ টোবাইঙ্ক, সংক্ষিপ্ত সংস্করণটি নিখুঁত নয়, কেবলমাত্র আমি খুঁজে পেয়েছি সেরা। এটি ব্যবহারিক হতে বোঝানো হয়েছে, সর্ব-সংবেদী নয়। আপনার মান যে ফিরে boolআসে তা লক্ষ করুন 0। এছাড়াও, আপনি অসঙ্গতিপূর্ণ ওভারলোডগুলি তৈরি করা থেকে নিরুৎসাহিত হন এবং আপনি যে মানগুলি ফিরিয়ে দেন সেগুলি বিবেচনা করা যেতে পারে। (উদাহরণস্বরূপ , &&||
এটিকে একটিতে

আমি 0x00এখানে আচ্ছাদিত কিনা তা নিশ্চিত নই ।
জায়েদ

@ জায়েদ, আপনি কি কোড 0x00(সংখ্যার মান শূন্য) বা স্ট্রিং 0x00(যার looks_like_numberজন্য মিথ্যা) এর দ্বারা প্রত্যাবর্তিত মান বলতে চান ? যেভাবেই হোক, এটি ইতিমধ্যে আচ্ছাদিত।
ইকেগামী

59

পার্লের নেটিভ বুলিয়ান টাইপ নেই, তবে একই আচরণ পেতে আপনি পূর্ণসংখ্যা বা স্ট্রিংগুলির তুলনা ব্যবহার করতে পারেন। পূর্ণসংখ্যার তুলনা ব্যবহার করে এটি করার একটি দুর্দান্ত উপায় অ্যালানের উদাহরণ। এখানে একটি উদাহরণ

my $boolean = 0;
if ( $boolean ) {
    print "$boolean evaluates to true\n";
} else {
    print "$boolean evaluates to false\n";
}

আমার কিছু প্রোগ্রামে আমি একটি জিনিস করেছি যা ধ্রুবক ব্যবহার করে একই আচরণ যুক্ত করা হয়:

#!/usr/bin/perl

use strict;
use warnings;

use constant false => 0;
use constant true  => 1;

my $val1 = true;
my $val2 = false;

print $val1, " && ", $val2;
if ( $val1 && $val2 ) {
    print " evaluates to true.\n";
} else {
    print " evaluates to false.\n";
}

print $val1, " || ", $val2;
if ( $val1 || $val2 ) {
    print " evaluates to true.\n";
} else {
    print " evaluates to false.\n";
}

"ব্যবহার ধ্রুবক" চিহ্নিত চিহ্নিত রেখাগুলি একটি স্থির নামযুক্ত সত্যকে সংজ্ঞায়িত করে যা সর্বদা 1 এর জন্য মূল্যায়ন করে, এবং একটি ধ্রুবকযুক্ত মিথ্যা যা সর্বদা 0 দ্বারা মূল্যায়ন করে 0. কারণ পার্লে ধ্রুবকগুলি যেভাবে সংজ্ঞায়িত করা হয়েছে, নিম্নলিখিত কোডের লাইনগুলিও ব্যর্থ হয়:

true = 0;
true = false;

ত্রুটি বার্তায় "স্কেলার অ্যাসাইনমেন্টে ধ্রুবক পরিবর্তন করতে পারে না" এর মতো কিছু বলা উচিত।

আমি দেখেছি যে একটি মন্তব্যে আপনি স্ট্রিংগুলির তুলনা সম্পর্কে জিজ্ঞাসা করেছেন। আপনার জানা উচিত যে পার্ল স্কেলার ভেরিয়েবলগুলিতে স্ট্রিং এবং সংখ্যাগত প্রকারগুলি একত্রিত করে আপনার কাছে স্ট্রিং এবং সংখ্যার তুলনা করার জন্য আলাদা সিনট্যাক্স রয়েছে:

my $var1 = "5.0";
my $var2 = "5";

print "using operator eq\n";
if ( $var1 eq $var2 ) {
    print "$var1 and $var2 are equal!\n";
} else {
    print "$var1 and $var2 are not equal!\n";
}

print "using operator ==\n";
if ( $var1 == $var2 ) {
    print "$var1 and $var2 are equal!\n";
} else {
    print "$var1 and $var2 are not equal!\n";
}

এই অপারেটরগুলির মধ্যে পার্থক্য পার্ল মধ্যে বিভ্রান্তির একটি খুব সাধারণ উত্স।


5
use warnings;পরিবর্তে#! perl -w
ব্র্যাড গিলবার্ট

11
দুর্বল ম্যাক্স ম্যাক্রো হিসাবে ধ্রুবক ব্যবহার করা বিপজ্জনক। এই কোড উদাহরণগুলি সমতুল্য নয়: if ($exitstatus) { exit; }বনাম if ($exitstatus == true) { exit; }, যা কোনও নৈমিত্তিক পর্যবেক্ষকের কাছে স্পষ্ট নাও হতে পারে। (এবং হ্যাঁ, শেষ উদাহরণটি দুর্বল প্রোগ্রামিং শৈলী, তবে এটি বিন্দুর পাশে রয়েছে)।
জানো

16

আমি সুপারিশ use boolean;। যদিও আপনাকে সিপিএন থেকে বুলিয়ান মডিউল ইনস্টল করতে হবে ।


7
পার্লে, জীবনের মতো, এখানেও অনেক সত্য রয়েছে। অনভিজ্ঞদের মতো নির্বোধ বিষয়গুলি লিখতে পছন্দ হয় if ($my_true_value == true)। ওয়ান ট্রুথ ট্রুথ রয়েছে বলে ভান করা আমার অভিজ্ঞতাতে, ব্যথার পথ এবং অকার্যকর কোড।
tjd

2
পার্ল প্রকৃতির দ্বারা দার্শনিক
ILMostro_7

13

আমার প্রিয় সবসময় হয়েছে

use constant FALSE => 1==0;
use constant TRUE => not FALSE;

যা অভ্যন্তরীণ প্রতিনিধিত্ব থেকে সম্পূর্ণ স্বাধীন।


5
উজ্জ্বল। আপনি এককভাবে পার্ল প্রোগ্রামিং ভাষা স্থির করেছেন!
নস্টালজ.ইও

8

আমি একটি টিউটোরিয়াল জুড়ে এসেছি যা পার্লে কোন মানগুলি সত্য এবং মিথ্যা সে সম্পর্কে একটি ভাল ব্যাখ্যা রয়েছে । এতে বলা হয়েছে:

নিম্নলিখিত স্কেলারের মানগুলি মিথ্যা হিসাবে বিবেচিত হয়:

  • undef - অপরিবর্তিত মান
  • 0 সংখ্যা 0, এমনকি যদি আপনি এটি 000 বা 0.0 হিসাবে লিখেন
  • '' খালি স্ট্রিং
  • '0' স্ট্রিংটিতে একটি একক 0 সংখ্যা রয়েছে।

নিম্নলিখিত সহ অন্যান্য সমস্ত স্কেলারের মানগুলি সত্য:

  • 1 যে কোনও অ -0 নম্বর
  • ' ' এটিতে একটি স্পেস সহ স্ট্রিং
  • '00' একটি স্ট্রিংয়ে দুই বা ততোধিক 0 টি অক্ষর
  • "0\n" a 0 এর পরে একটি নিউলাইন
  • 'true'
  • 'false' হ্যাঁ, এমনকি স্ট্রিং 'ভুয়া' সত্যকেও মূল্যায়ন করে।

পার্ল সম্পর্কে সত্য এবং মিথ্যা সম্পর্কে ব্যাখ্যা করার জন্য আরও একটি ভাল টিউটোরিয়াল রয়েছে ।


6

বুলিয়ান মানগুলির জন্য ববফ দ্বারা দেওয়া সুন্দর ব্যাখ্যা : সত্য বা মিথ্যা? একটি দ্রুত রেফারেন্স গাইড

সত্য বিভিন্ন মানের জন্য পরীক্ষা

                       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

উত্তম উত্তর, তবে পার্লমনক্স.আরজে একটি শক্তিশালী, নামী উত্স। মন্তব্য এবং লিঙ্কের পরিবর্তে কিছু আসল সামগ্রী পাওয়া ভাল লাগবে । : - /
ILMostro_7

0

নিম্নলিখিত ফাইলের উপসর্গটি ব্যবহার করুন, এটি আপনার পার্ল স্ক্রিপ্টটি 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' )
             };

আসলে এটি ব্যবহার করার কয়েকটি কারণ রয়েছে।

আমার কারণ হ'ল জেএসএনের সাথে কাজ করা, আমি কীগুলির মান হিসাবে 0 এবং 1 পেয়েছি তবে এই হ্যাকটি নিশ্চিত করবে যে আপনার স্ক্রিপ্টের সাথে সঠিক মানগুলি রাখা হয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.