পার্লের দুটি স্ট্রিংকে আমি কীভাবে তুলনা করব?
আমি পার্ল শিখছি, আমি এই প্রাথমিক প্রশ্নটি এখানে স্ট্যাকওভারফ্লোতে দেখলাম এবং কোনও ভাল উত্তর পাই নি তাই আমি ভেবেছিলাম আমি জিজ্ঞাসা করব।
পার্লের দুটি স্ট্রিংকে আমি কীভাবে তুলনা করব?
আমি পার্ল শিখছি, আমি এই প্রাথমিক প্রশ্নটি এখানে স্ট্যাকওভারফ্লোতে দেখলাম এবং কোনও ভাল উত্তর পাই নি তাই আমি ভেবেছিলাম আমি জিজ্ঞাসা করব।
উত্তর:
পার্লডোক পার্লপ দেখুন । ব্যবহারের lt
, gt
, eq
, ne
, এবং cmp
স্ট্রিং তুলনা জন্য উপযুক্ত হিসাবে:
বাইনারি
eq
হলে TRUE বাম যুক্তি stringwise হয় ডান যুক্তি সমান।বাইনারি
ne
হলে TRUE বাম যুক্তি stringwise নয় অধিকার যুক্তি সমান।বাইনারি
cmp
-1, 0, বা 1 এর উপর নির্ভর করে বাম আর্গুমেন্টটি স্ট্রিংওয়াইজের চেয়ে কম, সমান বা ডান আর্গুমেন্টের চেয়ে বড় whetherবাইনারি
~~
তার তর্কগুলির মধ্যে একটি স্মার্টমেচ করে। ...
lt
,le
,ge
,gt
এবংcmp
কোলেশন (সাজানোর) অর্ডার বর্তমান লোকেল দ্বারা নির্দিষ্ট ব্যবহার করেন একটি লিগ্যাসি ব্যবহার লোকেল (কিন্তুuse locale ':not_characters'
) প্রভাব রয়েছে। পারলোকেলে দেখুন । এগুলি ইউনিকোডের সাথে মিশ্রন করবেন না, কেবলমাত্র লিগ্যাসি বাইনারি এনকোডিংগুলির সাথে। স্ট্যান্ডার্ড ইউনিকোড :: কোলেট এবং ইউনিকোড :: কোলেট :: লোকেল মডিউলগুলি কোলেশন ইস্যুতে আরও অনেক শক্তিশালী সমাধান সরবরাহ করে।
index
একটি স্ট্রিং অন্য স্ট্রাস্টিং কিনা তা দেখতে ব্যবহার করুন ।
!=
এবং ne
এক নয়, কারণ !=
এবং ne
এটি আলাদা হতে সংজ্ঞায়িত হয়েছে। এটা কত কঠিন ?! একটি সংখ্যার তুলনা অপারেটর হওয়ায় এর !=
দুটি অপারেশনকে সংখ্যায় রূপান্তর করে perl -E 'say "equal" if not "a" != "b"'
।
cmp
তুলনা করা
'a' cmp 'b' # -1
'b' cmp 'a' # 1
'a' cmp 'a' # 0
eq
সমান
'a' eq 'b' # 0
'b' eq 'a' # 0
'a' eq 'a' # 1
ne
অসমান
'a' ne 'b' # 1
'b' ne 'a' # 1
'a' ne 'a' # 0
lt
এর চেয়ে কম
'a' lt 'b' # 1
'b' lt 'a' # 0
'a' lt 'a' # 0
le
অপেক্ষাকৃত ছোট বা সমান
'a' le 'b' # 1
'b' le 'a' # 0
'a' le 'a' # 1
gt
অপেক্ষা বৃহত্তর
'a' gt 'b' # 0
'b' gt 'a' # 1
'a' gt 'a' # 0
ge
এর চেয়ে বড় বা সমান
'a' ge 'b' # 0
'b' ge 'a' # 1
'a' ge 'a' # 1
দেখুন perldoc perlop
আরও তথ্যের জন্য।
(আমি এটিকে সামান্যই সহজ করে দিচ্ছি তবে cmp
একটি শূন্য স্ট্রিং এবং এর পরিবর্তে একটি সংখ্যাসূচক শূন্য মান 0
এবং একটি মান যা স্ট্রিং '1'
এবং সংখ্যাসূচক মান উভয়ই ফিরিয়ে দিচ্ছি 1
These এগুলি হ'ল একই মানগুলি পার্লের বুলিয়ান অপারেটরদের কাছ থেকে সর্বদা পান You আপনি বুলিয়ান বা সংখ্যাসূচক ক্রিয়াকলাপের জন্য কেবল রিটার্ন মানগুলি ব্যবহার করা উচিত, এক্ষেত্রে পার্থক্যটি আসলে কোনও বিষয় নয়))
eq
, gt
, lt
ইত্যাদি সঠিক নয় ... তারা সত্য বা মিথ্যা ফিরে। শুধুমাত্র cmp
নির্দিষ্ট সংখ্যাসূচক মান প্রদান করে।
leg
পরিবর্তে সাধারণ অপারেটরগুলি ব্যবহার করে cmp
যার পরিবর্তে জেনেরিক তুলনার জন্য ব্যবহৃত হয়।
সিনান Ünür স্ট্রিং তুলনা অপারেটরগুলির তালিকাভুক্তকরণের যোগে পার্ল ৫.১০ স্মার্ট ম্যাচ অপারেটর যুক্ত করে।
স্মার্ট ম্যাচ অপারেটর তাদের ধরণের ভিত্তিতে দুটি আইটেমের তুলনা করে। 5.10 আচরণের জন্য নীচের চার্টটি দেখুন (আমি বিশ্বাস করি যে এই আচরণটি 5.10.1-এ সামান্য পরিবর্তিত হচ্ছে):
perldoc perlsyn
"বিস্তারিত স্মার্ট ম্যাচিং" :স্মার্ট মিলের আচরণ নির্ভর করে যে কী ধরণের জিনিস এর যুক্তি are এটি সর্বদা পরিবর্তিত, অর্থাত্
$a ~~ $b
একই আচরণ করে$b ~~ $a
। আচরণটি নিম্নলিখিত সারণি দ্বারা নির্ধারিত হয়: প্রথম সারি যা প্রয়োগ হয়, উভয় ক্রমে মিলের আচরণ নির্ধারণ করে।
Imp a $ b মিলিত প্রকারের মিশ্রিত মিল কোড ===== ======================================== (ওভারলোডিং ট্রাম্প সবকিছু) কোড [+] কোড [+] রেফারেনশিয়াল সমতা $ a == $ খ যে কোনও কোড [+] স্কেলার সাব সত্য $ বি -> ($ এ) হ্যাশ হ্যাশ হ্যাশ কীগুলি অভিন্ন [সাজানোর কীগুলি% $ এ] ~~ [সাজানোর কীগুলি% $ বি] হ্যাশ অ্যারে হ্যাশ স্লাইস অস্তিত্ব গ্রেপ {উপস্থিত $ এ -> {$ _}} @ $ বি হ্যাশ রেজেক্স হ্যাশ কী গ্রেপ গ্রেপ / $ বি /, কী% $ এ হ্যাশ যে কোনও হ্যাশ প্রবেশের অস্তিত্ব বিদ্যমান $ a -> {$ b} অ্যারে অ্যারে অ্যারেগুলি অভিন্ন [*] অ্যারে রেজেক্স অ্যারে গ্রেপ গ্রেপ / $ বি /, @। এ অ্যারে নুম অ্যারেতে গ্রেপ number _ == $ বি, @। এ সংখ্যা রয়েছে অ্যারে যে কোনও অ্যারেতে স্ট্রিং গ্রেপ contains _ ইক $ বি, @। এ রয়েছে কোনও অপরিবর্তিত অপরিজ্ঞাত! সংজ্ঞায়িত $ ক যেকোন রেজেক্স প্যাটার্ন ম্যাচ $ a = ~ / $ বি / কোড () কোড () ফলাফলগুলি সমান $ a -> () eq $ b -> () যে কোনও কোড () সাধারণ বন্ধের সত্য $ b -> () # উপেক্ষা করা $ ক সংখ্যা নির্লজ্জ [!] সংখ্যা সমতা $ a == $ খ যে কোনও স্ট্রিং স্ট্রিং সমতা $ a eq $ b যে কোনও সংখ্যার সাম্যিক সমতা $ a == $ খ যে কোনও স্ট্রিং সমতা $ a eq $ b + - এটি অবশ্যই একটি কোড রেফারেন্স হতে হবে যার প্রোটোটাইপ (উপস্থিত থাকলে) "" নয় (একটি "প্রোটোটাইপ সহ সাবস্ক্রিপশন নীচে 'কোড ()' এন্ট্রি দ্বারা ডিল করা হয়) * - অর্থাৎ প্রতিটি উপাদান অপরটিতে একই সূচকের উপাদানটির সাথে মেলে অ্যারে। যদি একটি বিজ্ঞপ্তি রেফারেন্স পাওয়া যায়, আমরা রেফারেন্সিয়াল ফিরে ফিরে সমতা। ! - হয় আসল সংখ্যা, অথবা একটি স্ট্রিং যা সংখ্যার মতো দেখাচ্ছে"ম্যাচিং কোড" প্রকৃত মিলের কোডটির প্রতিনিধিত্ব করে না, অবশ্যই: এটির উদ্দেশ্যটি ব্যাখ্যা করার জন্য এটি কেবলমাত্র। গ্রেপ থেকে ভিন্ন, স্মার্ট ম্যাচ অপারেটর যখনই এটি করতে পারে শর্ট সার্কিট করবে।
ওভারলোডিংয়ের মাধ্যমে কাস্টম মিলে যাওয়া কোনও
~~
অপারেটরকে ওভারলোড করে যেভাবে কোনও বস্তুর সাথে মেলে সেভাবে পরিবর্তন করতে পারেন । এটি স্বাভাবিক স্মার্ট ম্যাচের শব্দার্থবিজ্ঞানগুলি ট্রাম্প করে। দেখুনoverload
।
print "Matched!\n" if ($str1 eq $str2)
পার্লের পৃথক স্ট্রিং তুলনা এবং সংখ্যার তুলনা অপারেটর রয়েছে ভাষায় আলগা টাইপিংয়ের ক্ষেত্রে সহায়তা করতে। আপনার বিভিন্ন অপারেটরের জন্য পার্লপ পড়তে হবে।
এই প্রশ্নের সুস্পষ্ট সাবটেক্সট হ'ল:
আপনি কেবল
==
দুটি স্ট্রিং একই কিনা তা পরীক্ষা করতে কেন ব্যবহার করতে পারবেন না ?
পার্লের পাঠ্য বনাম সংখ্যাগুলির জন্য পৃথক ডেটা ধরণের নেই। তারা উভয়ই "স্কেলার" টাইপ দ্বারা উপস্থাপিত হয় । অন্য উপায় রাখুন স্ট্রিং হয় সংখ্যার যদি আপনি তাদের যেমন ব্যবহার ।
if ( 4 == "4" ) { print "true"; } else { print "false"; }
true
if ( "4" == "4.0" ) { print "true"; } else { print "false"; }
true
print "3"+4
7
যেহেতু পাঠ্য এবং সংখ্যাগুলি ভাষার দ্বারা পৃথক নয়, তাই আমরা ==
উভয় ক্ষেত্রেই সঠিকভাবে কাজ করতে অপারেটরটিকে ওভারলোড করতে পারি না। অতএব, পার্ল eq
মানকে পাঠ্যের হিসাবে তুলনা করে :
if ( "4" eq "4.0" ) { print "true"; } else { print "false"; }
false
if ( "4.0" eq "4.0" ) { print "true"; } else { print "false"; }
true
সংক্ষেপে:
==
বা ব্যবহার !=
করুনeq
বা ব্যবহার ne
করুনঅন্যান্য অনেক ফাংশন এবং অপারেটর রয়েছে যা স্কেলারের মানগুলির তুলনা করতে ব্যবহার করা যেতে পারে, তবে এই দুটি ফর্মের মধ্যে পার্থক্য জানার একটি গুরুত্বপূর্ণ প্রথম পদক্ষেপ।
এবং যদি আপনি দুটি স্ট্রিংয়ের মধ্যে পার্থক্যগুলি বের করতে চান তবে আপনি স্ট্রিং :: ডিফ ব্যবহার করতে পারেন ।