2015-03-22 15 views
5

मैं कोड है देता है:पुश चेतावनी

push @$args{"ARRAY"}, "value"; 

यह चेतावनी कह देता है:

push on reference is experimental at ... 

अगर मैं सिर्फ सरणी चारों ओर ब्लॉक का उपयोग करें:

push @{args{"ARRAY"}}, "value"; 

तब चेतावनी गायब हो जाती है। ये क्यों हो रहा है?

उत्तर

8

@$args{"ARRAY"}@{$args}{"ARRAY"} के बराबर है, @{$args{"ARRAY"}} नहीं। perlref, section "Using References" से:

क्योंकि $$x के सरल मामले के लिए curlies छोड़ करने में सक्षम होने की

, लोगों को अक्सर उचित ऑपरेटर के रूप में अपसंदर्भन प्रतीकों को देखने की गलती है, और उनके पूर्वता के बारे में चिंता। यदि वे थे, हालांकि, आप ब्रेसिज़ के बजाय ब्रांड्स का उपयोग कर सकते हैं। यह केस नहीं है। नीचे दिए गए अंतर पर विचार करें; मामले 0 मामले 1 की एक छोटी-हाथ संस्करण, 2 मामला नहीं है:

$$hashref{"KEY"} = "VALUE";  # CASE 0 
    ${$hashref}{"KEY"} = "VALUE";  # CASE 1 
    ${$hashref{"KEY"}} = "VALUE";  # CASE 2 
    ${$hashref->{"KEY"}} = "VALUE";  # CASE 3