আমি চেষ্টা করেছি:
$var = false;
$var = FALSE;
$var = False;
এগুলির কোনওটিই কাজ করে না। আমি ত্রুটি বার্তা পেয়েছি
"কঠোর উপকার" ব্যবহারের সময়, "বেয়ারওয়ার্ড" মিথ্যা "অনুমোদিত নয়।
আমি চেষ্টা করেছি:
$var = false;
$var = FALSE;
$var = False;
এগুলির কোনওটিই কাজ করে না। আমি ত্রুটি বার্তা পেয়েছি
"কঠোর উপকার" ব্যবহারের সময়, "বেয়ারওয়ার্ড" মিথ্যা "অনুমোদিত নয়।
উত্তর:
পার্লে, নিম্নলিখিতগুলি শর্তসাপেক্ষে মিথ্যাতে মূল্যায়ন করে:
0
'0'
undef
'' # Empty scalar
() # Empty list
('')
বাকিরা সত্য। true
বা এর জন্য কোনও ন্যাওয়ার্ড নেই false
।
undef
।
('')
এবং ''
একই মান। আমি মনে করি আপনি খালি স্ট্রিং (এমনকী প্যারেনগুলি তালিকা তৈরি করে না) নিয়ে একটি উপাদান দিয়ে একটি তালিকা বোঝাতে চেয়েছিলেন, তবে আমি ইতিমধ্যে উল্লেখ করেছি যে তালিকাটি মিথ্যাতে সত্য কিনা তা পরীক্ষা করা অসম্ভব।
!0
ওরফে PL_sv_yes
) এবং মিথ্যা ( !1
ওরফে PL_sv_no
) রয়েছে। বা আপনি কি বলছেন যে যখনই এই দুটি মূল্যবোধ ব্যতীত অন্য কোনও কিছুর সত্যতার জন্য পরীক্ষা করা হয় তখন পার্লের ক্রাক করা উচিত? এটি সম্পূর্ণ ভয়ঙ্কর হবে। উদাহরণস্বরূপ এটি প্রতিরোধ করবে$x ||= $default;
আমি যে মিথ্যাটি এসেছি তার সর্বাধিক সম্পূর্ণ, সংক্ষিপ্ত সংজ্ঞাটি হ'ল:
খালি স্ট্রিং বা স্ট্রিংয়ে স্ট্রিংফাইজ করা কিছু
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"
)my $value = do { package XXX; use overload q[""] => sub { "XXX" }, q[bool] => sub { 0 }; bless [] };
। এখন $value
"XXX" এ স্ট্রিংফাই হবে তবে মিথ্যাতে উত্সাহিত হবে।
bool
আসে তা লক্ষ করুন 0
। এছাড়াও, আপনি অসঙ্গতিপূর্ণ ওভারলোডগুলি তৈরি করা থেকে নিরুৎসাহিত হন এবং আপনি যে মানগুলি ফিরিয়ে দেন সেগুলি বিবেচনা করা যেতে পারে। (উদাহরণস্বরূপ , &&
||
0x00
এখানে আচ্ছাদিত কিনা তা নিশ্চিত নই ।
0x00
(সংখ্যার মান শূন্য) বা স্ট্রিং 0x00
(যার looks_like_number
জন্য মিথ্যা) এর দ্বারা প্রত্যাবর্তিত মান বলতে চান ? যেভাবেই হোক, এটি ইতিমধ্যে আচ্ছাদিত।
পার্লের নেটিভ বুলিয়ান টাইপ নেই, তবে একই আচরণ পেতে আপনি পূর্ণসংখ্যা বা স্ট্রিংগুলির তুলনা ব্যবহার করতে পারেন। পূর্ণসংখ্যার তুলনা ব্যবহার করে এটি করার একটি দুর্দান্ত উপায় অ্যালানের উদাহরণ। এখানে একটি উদাহরণ
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";
}
এই অপারেটরগুলির মধ্যে পার্থক্য পার্ল মধ্যে বিভ্রান্তির একটি খুব সাধারণ উত্স।
use warnings;
পরিবর্তে#! perl -w
if ($exitstatus) { exit; }
বনাম if ($exitstatus == true) { exit; }
, যা কোনও নৈমিত্তিক পর্যবেক্ষকের কাছে স্পষ্ট নাও হতে পারে। (এবং হ্যাঁ, শেষ উদাহরণটি দুর্বল প্রোগ্রামিং শৈলী, তবে এটি বিন্দুর পাশে রয়েছে)।
আমি সুপারিশ use boolean;
। যদিও আপনাকে সিপিএন থেকে বুলিয়ান মডিউল ইনস্টল করতে হবে ।
if ($my_true_value == true)
। ওয়ান ট্রুথ ট্রুথ রয়েছে বলে ভান করা আমার অভিজ্ঞতাতে, ব্যথার পথ এবং অকার্যকর কোড।
আমার প্রিয় সবসময় হয়েছে
use constant FALSE => 1==0;
use constant TRUE => not FALSE;
যা অভ্যন্তরীণ প্রতিনিধিত্ব থেকে সম্পূর্ণ স্বাধীন।
আমি একটি টিউটোরিয়াল জুড়ে এসেছি যা পার্লে কোন মানগুলি সত্য এবং মিথ্যা সে সম্পর্কে একটি ভাল ব্যাখ্যা রয়েছে । এতে বলা হয়েছে:
নিম্নলিখিত স্কেলারের মানগুলি মিথ্যা হিসাবে বিবেচিত হয়:
undef
- অপরিবর্তিত মান0
সংখ্যা 0, এমনকি যদি আপনি এটি 000 বা 0.0 হিসাবে লিখেন''
খালি স্ট্রিং'0'
স্ট্রিংটিতে একটি একক 0 সংখ্যা রয়েছে।নিম্নলিখিত সহ অন্যান্য সমস্ত স্কেলারের মানগুলি সত্য:
1
যে কোনও অ -0 নম্বর' '
এটিতে একটি স্পেস সহ স্ট্রিং'00'
একটি স্ট্রিংয়ে দুই বা ততোধিক 0 টি অক্ষর"0\n"
a 0 এর পরে একটি নিউলাইন'true'
'false'
হ্যাঁ, এমনকি স্ট্রিং 'ভুয়া' সত্যকেও মূল্যায়ন করে।পার্ল সম্পর্কে সত্য এবং মিথ্যা সম্পর্কে ব্যাখ্যা করার জন্য আরও একটি ভাল টিউটোরিয়াল রয়েছে ।
বুলিয়ান মানগুলির জন্য ববফ দ্বারা দেওয়া সুন্দর ব্যাখ্যা : সত্য বা মিথ্যা? একটি দ্রুত রেফারেন্স গাইড
সত্য বিভিন্ন মানের জন্য পরীক্ষা
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
নিম্নলিখিত ফাইলের উপসর্গটি ব্যবহার করুন, এটি আপনার পার্ল স্ক্রিপ্টটি 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 পেয়েছি তবে এই হ্যাকটি নিশ্চিত করবে যে আপনার স্ক্রিপ্টের সাথে সঠিক মানগুলি রাখা হয়েছে।