2011-04-27 12 views
8

रास्ता AUTOLOAD की तरह मांग पर सबरूटीन्स परिभाषित करने के लिए इस्तेमाल किया जा सकता है, मैं अगर वहाँ एक पैकेज के गुप्त कोष में टाई ताकि मैं उस पैकेज में चर के लिए उपयोग को रोक सकता एक तरीका है सोच रहा हूँ।पर्ल में, क्या स्टैस बांधने का कोई तरीका है?

मैं निम्नलिखित विचार के विभिन्न क्रमपरिवर्तन की कोशिश की है, लेकिन कोई भी काम करने के लिए लग रहे हैं: Bad symbol for scalar ... अंतिम पंक्ति पर साथ

{package Tie::Stash; 
    use Tie::Hash; 
    BEGIN {our @ISA = 'Tie::StdHash'} 
    sub FETCH { 
     print "calling fetch\n"; 
    } 
} 

{package Target} 

BEGIN {tie %Target::, 'Tie::Stash'} 

say $Target::x; 

यह मर जाता है, कभी मुद्रण "calling fetch" बिना। यदि say $Target::x; लाइन हटा दी गई है, तो प्रोग्राम चलाता है और ठीक से बाहर निकलता है।

मेरा अनुमान है विफलता stashes तरह किया जा रहा से कोई लेना देना नहीं है कि है, लेकिन हैश के रूप में ही नहीं है, तो मानक टाई तंत्र सही काम नहीं कर रहा है (या यह हो सकता है कि गुप्त कोष में देखने जादू टाई का आह्वान कभी नहीं)।

क्या किसी को पता है कि यह संभव है? शुद्ध पर्ल सबसे अच्छा होगा, लेकिन एक्सएस समाधान ठीक है।

+0

यह काम करता है अगर आप 'टाई ले ...' 'BEGIN' ब्लॉक से बाहर कहते हैं? – mob

+0

यदि आप बाद में टाई करते हैं, तो पर्ल पहले से ही चला गया है और उस ग्लोब की तलाश में चला गया है जिसमें $ Target :: x है, इसलिए कुछ भी नहीं होता है। क्यों देखने के लिए perl -M0 = Terse foo.pl चलाने का प्रयास करें। – Alex

उत्तर

4

आप संकलन समय आंतरिक त्रुटि ("स्केलर के लिए खराब प्रतीक") मार रहे हैं, ऐसा तब होता है जब पर्ल काम करने की कोशिश कर रहा है कि '$ Target :: x' होना चाहिए, जिसे आप डिबगिंग चलाकर सत्यापित कर सकते हैं पर्ल के साथ:

perl -DT foo.pl 
... 
### 14:LEX_NORMAL/XOPERATOR ";\n" 
### Pending identifier '$Target::x' 
Bad symbol for scalar at foo.pl line 14. 

मैं ':: लक्ष्य' के लिए जीवी कुछ और जब आप टाई() यह, कि इतने जो अंततः अपने आंतरिक हैश के लिए नहीं कर सकते हैं पाने के लिए कोशिश करता है की जगह लगता है। यह देखते हुए कि टाई() एक मेस का एक छोटा सा है, मुझे लगता है तुम क्या करने से काम नहीं चलेगा, जो भी सुझाव दिया है इस (पुराने) p5p पर आदान-प्रदान के सेट से कोशिश कर रहे हैं क्या:

https://groups.google.com/group/perl.perl5.porters/browse_thread/thread/f93da6bde02a91c0/ba43854e3c59a744?hl=en&ie=UTF-8&q=perl+tie+stash#ba43854e3c59a744

1

एक छोटी सी सवाल का देर से, लेकिन हालांकि यह टाई उपयोग करने के लिए यह करने के लिए संभव नहीं है, चर :: जादू आप एक गुप्त कोष में जादू देते हैं और इस तरह कुछ इसी तरह प्राप्त करने के लिए अनुमति देता है।

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

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