2010-03-30 15 views
8

मैं सिर्फ हमारे कोड बेस में कुछ कोड को देखा (और यह पुराने कोड है, पर्ल 3 या पर्ल 4 दिनों में) जो इस तरह लग रहा है (मैं बहुत सरल बनाने रहा हूँ):पर्ल इस मामले में धक्का देने के लिए इस तर्क के साथ क्या कर रहा है?

@array; 
push(array, $some_scalar); 

सूचना है कि array में push() में @ नहीं है। मुझे लगता है कि धक्का के पीछे कोड जानता है कि पहला तर्क सरणी होना चाहिए, इसलिए array टाइपग्लोब से सरणी को पकड़ लें। क्या यह कम या ज्यादा है? यदि पर्ल बिना किसी समस्या के ऐसा करने में सक्षम है, तो आपको @ को क्यों शामिल करना होगा?

+1

इस कोड को 'उपयोग चेतावनियों' के साथ चलाएं और देखें कि क्या यह आपके प्रश्न का उत्तर देता है। – mob

+1

इस पुराने कोड के लिए चेतावनियां चालू करना एक अप्रत्याशित आपदा होगी, लेकिन मुझे आपका अंक मिल जाएगा। – Morinar

+2

@Monirar: यदि आपको यह कोड बनाए रखना है, तो इसे सक्षम चेतावनी के साथ चलाने के लिए इसे बेहतर बनाना सबूत उपयोगी हो सकता है। –

उत्तर

9

यह पार्सर की पुरानी 'विशेषता' है। परिवर्तनीय एक पैकेज चर वैरिएबल है अगर @ पुश में अनिवार्य नहीं है। यह कई लोगों द्वारा एक बग के रूप में माना जाता है जिसे यद्यपि तय किया जाना चाहिए। आपको वास्तव में ऐसा नहीं करना चाहिए।

+0

एचएम, हालांकि यह वास्तव में पुश प्रदर्शन नहीं करता प्रतीत होता है। इसके साथ: 'perl -e' my @array =(); पुश (सरणी, "foo"); प्रिंट करें "@array \ n"; '' मुझे कोई आउटपुट नहीं मिला। DID मैं कुछ मूर्ख हूँ? – Cascabel

+2

शायद इसके बाद टाइपग्लब्स के साथ कुछ करना है। ऊपर जेफोमी का नमूना कोड कुछ भी आउटपुट नहीं करता है, लेकिन यदि आप 'मेरा' हटाते हैं, तो यह करता है। – mob

+1

हाँ, आप सही हैं। यह केवल पैकेज चर के लिए काम करता प्रतीत होता है। –

4

यह पर्ल का एक संदिग्ध "फीचर" है, बहिष्कृत व्यवहार; यह एक त्रुटि होनी चाहिए, लेकिन यह काम करता है।

यदि आप संकलक (पर्ल डब्ल्यू, अत्यधिक की सिफारिश की) की चेतावनी चालू करते हैं, यह चेतावनी देते हैं:

Array @aa missing the @ in argument 1 of push() at xx.pl line 2. 
संबंधित मुद्दे