2010-09-03 25 views
20

मैं सिर्फ Catalyst.pl द्वारा उत्पन्न इस को नोटिस ले लिया। यह स्पष्ट रूप से कुछ प्रकार की unannotated हैक है। इस तरह एक संस्करण स्ट्रिंग स्थापित करने का क्या फायदा है? मैं यह भी नहीं समझ सकता कि वे क्या करने की कोशिश कर रहे हैं।पर्ल संस्करण स्ट्रिंग: EVAL EXPR का उपयोग क्यों करें?

our $VERSION = '0.01'; 
$VERSION = eval $VERSION; 

उत्तर

25

संस्करण संख्या पर्ल में जटिल हैं। गोररी विवरण की तलाश करने वालों के लिए Here's an excellent overview। यह आश्चर्यजनक हो सकता है कि आप कितने सूक्ष्म तरीके वहाँ कोई बात बिगड़ मिल रहे हैं ...

अपने सवाल का सीधा जवाब हालांकि, अलग अलग बातें विभिन्न स्वरूपों उम्मीद करते हैं कि है। सीपीएएन के लिए, आप स्ट्रिंग के रूप में उदाहरण के लिए विकास संस्करणों की परवाह करते हैं। रनटाइम के लिए, आप उनके बारे में एक संख्या के रूप में परवाह करते हैं।

$VERSION = "0.01_001" के मामले पर विचार करें। eval सही ढंग से नंबर 0.01001 में बदल देता है।

+1

मेरे भगवान, मुझे नहीं पता था कि पर्ल संस्करण इतने भयानक थे। महान लेख के लिए +1। –

+0

उस लिंक के लिए धन्यवाद, यह मैंने पढ़ा है बेहतर पर्ल ब्लॉग पोस्ट में से एक है। यह वास्तव में इस समस्या को अच्छी तरह से समझाता है (लेकिन यह 'version.pm' प्रकारों पर एक अद्यतन के लिए begs)। –

5

मैं इस misremembering किया जा सकता है, लेकिन मुझे लगता है कि कुछ स्वचालित कोड पारसर्स कोड की पंक्ति देखना पसंद:

our $VERSION = '0.01'; 

लेकिन आप वास्तव में चाहते हैं $ संस्करण एक स्ट्रिंग के बजाय एक नाव धारण करने के लिए।

आप this article पढ़ सकते हैं, मैं जानता हूँ कि मैं जा रहा हूँ।

ओह, प्रिय भगवान, अब मुझे याद है कि मैं क्यों

our $VERSION = 20100903; 

शैली संस्करण संख्याओं का उपयोग करें। वह सिर्फ पागल है। मुझे पर्ल पसंद है, लेकिन वह शुद्ध, परिष्कृत, केंद्रित पागलपन है। मैं डेविड गोल्डन के लेख को सारांशित करने की कोशिश नहीं करूंगा। आपको बस इसे पढ़ना और रोना है।

+2

उत्तर देने के बाद संस्करण संख्याएं मेरे लिए शीर्ष 3 स्थान लेती हैं, "आपकी पसंदीदा प्रोग्रामिंग भाषा के बारे में 5 चीजें आप किससे नफरत करते हैं?"। – szbalint

+0

@szbalint: यह तब शीर्ष 5 के बारे में अच्छी तरह से सोचा नहीं होगा। –

6

eval, एक नंबर करने के स्ट्रिंग "0.001_001" धर्मान्तरित पर्ल सांख्यिक शाब्दिक के लिए नियमों को (जो स्पष्टता के लिए अंडरस्कोर अनुमति देते हैं) के बाद। नतीजा 0.001001 है।

eval के बिना, स्ट्रिंग को तारों को बदलने के लिए नियम के बाद एक संख्या में परिवर्तित किया जाता है, जो पहले गैर-संख्यात्मक चरित्र पर रुक जाता है।

उदाहरण के लिए: perl -e 'print "0.001_001" + 0'

12

से perlmodstyle: Version numbering

आप एक 'बीटा' या 'अल्फा' एक मॉड्यूल के संस्करण जारी करना चाहते हैं लेकिन नहीं CPAN.pm के रूप में यह सूची बनाना चाहते हैं सबसे हालिया नियमित संस्करण संख्या के बाद '_' का उपयोग करें, इसके बाद कम से कम 2 अंक, उदाहरण के बाद। 1.20_01। यदि आप ऐसा करते हैं, तो निम्नलिखित मुहावरा की सिफारिश की है:

  1. $ संस्करण = "1।12_01 ";
  2. $ XS_VERSION = $ संस्करण;

कि चाल MakeMaker केवल पहली पंक्ति पढ़ा जाएगा और इस तरह पढ़ा के साथ; # केवल यदि आप XS कोड

  • $ संस्करण = eval $ संस्करण है जरूरत अंडरस्कोर, जबकि पर्ल दुभाषिया एक चेतावनी के बारे में $ संस्करण उत्तेजक बिना $ संस्करण बाद में कार्य है कि एक संख्या के रूप में $ संस्करण का इलाज तो ऐसा करने में सक्षम हो जाएगा का मूल्यांकन करें और एक संख्या में स्ट्रिंग परिवर्तित कर देंगे। एक नहीं है नंबर।

  • संबंधित मुद्दे