मैं एक स्ट्रिंग में फ़ंक्शन तर्कों की एक सूची को सामान्य कैसे बना सकता हूं, जैसे कि दो तर्क सूचियों को एक ही स्ट्रिंग में कनवर्ट किया जाता है अगर वे प्रभावी रूप से बराबर हैं? एल्गोरिथ्म चाहिएज्ञापन के लिए पर्ल फ़ंक्शन तर्कों को सामान्य कैसे करें?
- एम्बेडेड हैश और सूचियों, बल्कि संदर्भ द्वारा की तुलना में, की तुलना गहरा
- पर ध्यान न दें कुंजी आदेश
- 3 और "3"
- एक अपेक्षाकृत पठनीय स्ट्रिंग उत्पन्न के बीच का अंतर (आवश्यक नहीं पर ध्यान न दें हैश लेकिन डिबगिंग के लिए अच्छा करने के लिए है)
- अच्छी तरह से प्रदर्शन करना (XS पर्ल अधिक पसंद)
यहके लिए आवश्यक है, यानी इसके तर्कों के आधार पर फ़ंक्शन के परिणाम को कैशिंग करना।
एक strawman उदाहरण के रूप में, Memoize एक डिफ़ॉल्ट नॉर्मलाइज़र, जो विफल रहता है # 1 और # 3 के रूप में इस का उपयोग करता है: एक समय मेरे जाने के लिए नॉर्मलाइज़र लिए
$argstr = join chr(28),@_;
था
JSON::XS->new->utf8->canonical
हालांकि यह हाल ही में स्केलर का उपयोग कैसे किया गया था, इस आधार पर नंबर 3 और स्ट्रिंग "3" differently का इलाज करता है। यह अनिवार्य रूप से समकक्ष तर्क सूचियों के लिए अलग-अलग तार उत्पन्न कर सकता है और ज्ञापन लाभ को कम कर सकता है।
मस्ती के लिए (। कार्यों के विशाल बहुमत को पता चल जाएगा या नहीं परवाह अगर वे 3 या "3" मिलता है) मैं serializers के एक झुंड को देखा कि कौन सा अंतर को देखने के लिए 3 और "3":
Data::Dump : equal - [3] vs [3]
Data::Dumper : not equal - [3] vs ['3']
FreezeThaw : equal - FrT;@1|@1|$1|3 vs FrT;@1|@1|$1|3
JSON::PP : not equal - [3] vs ["3"]
JSON::XS : not equal - [3] vs ["3"]
Storable : not equal - <unprintable>
YAML : equal - ---\n- 3\n vs ---\n- 3\n
YAML::Syck : equal - --- \n- 3\n vs --- \n- 3\n
YAML::XS : not equal - ---\n- 3\n vs ---\n- '3'\n
उन लोगों में से जो "बराबर" की रिपोर्ट करते हैं, सुनिश्चित नहीं हैं कि उन्हें हैश कुंजी ऑर्डर को अनदेखा करने के लिए कैसे प्राप्त किया जाए।
मैं पहले से ही तर्क सूची चला सकता हूं और सभी संख्याओं को स्ट्रिंग कर सकता हूं, लेकिन इसके लिए एक गहरी प्रतिलिपि बनाने की आवश्यकता होगी और # 5 का उल्लंघन होगा।
धन्यवाद!
भी [टेस्ट :: अधिक] (http://metacpan.org/module/Test::More) है is_deeply, और [टेस्ट :: दीप] (http://metacpan.org/module/Test :: दीप) eq_deeply। – Ether