2010-01-08 15 views
21

मैं निम्नलिखित कोड चला रहा हूं और @rainbow सरणी में पहले तत्व को @rainbow सरणी में पांचवें-से-अंतिम तत्व के माध्यम से प्रिंट करने का प्रयास कर रहा हूं। इस कोड को सरणी की सीमा के भीतर किसी भी सकारात्मक सूचकांक के लिए काम करता है, लेकिन नकारात्मक लोगों के लिए नहीं:पर्ल में अंतिम सरणी तत्वों से मैं पांचवें को पहली बार प्रिंट कैसे कर सकता हूं?

@rainbow = ("a".."z"); 
@slice = @rainbow[1..-5]; 
print "@slice\n"; 

उत्तर

37

आप

my @slice = @rainbow[0 .. $#rainbow - 5]; 

सावधान रहें चाहते हैं, 1 दूसरा तत्व है, पहले नहीं है।

+3

मामला किसी को भी देखने की क्या $ # सरणी http://stackoverflow.com/questions/8618858/how-do-dollar-and-number-sign-together-work-in-perl मतलब है –

+0

धन्यवाद की जरूरत है @ चास, यह मेरे लिए काम किया –

18

.. ऑपरेटर रूपों सही मूल्य बाएं से एक range - अगर सही से अधिक या बराबर है बाएं। इसके अलावा, पर्ल में, सरणी अनुक्रमण शून्य पर शुरू होता है।

इस बारे में कैसे?

@slice = @rainbow[0..$#rainbow-5]; 

$#array आपको सरणी में अंतिम तत्व का सूचकांक देता है।

5

perlop में दर्ज range operator के लिए पहले दो वाक्य, से:

बाइनरी ".." सीमा ऑपरेटर, जो वास्तव में दो अलग-अलग संदर्भ के आधार पर ऑपरेटरों है। सूची संदर्भ में, यह बाएं मान से दाएं मूल्य तक गिनती मानों (एक द्वारा ऊपर) की एक सूची देता है। यदि बायां मान सही मान से अधिक है तो यह खाली सूची देता है।

जब कोड काम नहीं करता है, तो यह देखने के लिए विघटित करें कि क्या हो रहा है। उदाहरण के लिए, आप को देखने के लिए यह क्या उत्पादन रेंज ऑपरेटर की कोशिश करेंगे:

my @indices = 1 .. -5; 
print "Indices are [@indices]\n"; 

जब आप एक खाली सूची मिल गया और महसूस किया है कि आप समझ में नहीं आता हो रहा है कि वहाँ, प्रलेखन जो कुछ के लिए आप कर रहे हैं की जाँच ऐसा करने की कोशिश कर रहा है कि आप ऐसा कर रहे हैं जो आपको लगता है कि यह करना चाहिए। :)

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

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