पर्ल + डाइजेस्ट :: एमडी 5, 89 बाइट्स
$_=q(use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex"\$_=q($_);eval");eval
कोई TIO लिंक नहीं है क्योंकि Digest :: MD5 TIO पर स्थापित नहीं है। ध्यान दें कि इसके लिए भाषा अनुरूपता स्तर 5.10 या इससे अधिक होना आवश्यक है ( -M5.010
यह पीपीसीजी नियमों के अनुसार बाइट जुर्माना नहीं करता है।
व्याख्या
यह अभी तक एक और "स्रोत कोड के एक फ़ंक्शन को प्रिंट करें" चुनौती है, जिसका अर्थ है कि इसे सार्वभौमिक रूप से एक सार्वभौमिक क्वीन कंस्ट्रक्टर के माध्यम से हल किया जा सकता है।
सार्वभौमिक रानी निर्माता
$_=q(…"\$_=q($_);eval");eval
हम q()
स्ट्रिंग संकेतन (जो घोंसले) का उपयोग करते हैं $_
, आरंभ करने के लिए , "डिफ़ॉल्ट" चर जिसे पेरल लापता तर्क के लिए उपयोग करता है। फिर हम eval
एक लापता तर्क के साथ, ताकि अंदर स्ट्रिंग का q()
मूल्यांकन हो जाए।
q()
पूरे कार्यक्रम को बनाने के तरीके के अंदर स्ट्रिंग एक विवरण है; हम कार्यक्रम के बाकी हिस्सों को शाब्दिक रूप से निर्दिष्ट करते हैं, फिर $_
अंदर के लिए पूरे स्ट्रिंग को स्थानापन्न करने के लिए एक unescaped का उपयोग करें ।
इस प्रकार तकनीक पूरे कार्यक्रम के स्रोत के समान सामग्री के साथ एक स्ट्रिंग बनाती है; हम इसे क्वाइल बनाने के लिए प्रिंट कर सकते थे। हम अन्य चीजें भी पहले कर सकते हैं, हालांकि, एक सार्वभौमिक क्वीन कंस्ट्रक्टर बना रहे हैं।
बाकी कार्यक्रम
use Digest::MD5 md5_hex;say"MD5 sum of my source is: ",md5_hex
बहुत सरल: एक एमडी 5 बिलिन का आयात करें, फिर प्रश्न में निर्दिष्ट निश्चित स्ट्रिंग को प्रिंट करें (यह इसे संपीड़ित करने के लायक नहीं है, मेरा मानना है कि पर्ल में डीकंप्रेसर शाब्दिक रूप से स्ट्रिंग को बताते हुए अधिक जगह लेगा), और एमडीआर बिलिन का उपयोग करें तार हम सार्वभौमिक quine निर्माता के माध्यम से मिला है।