यह एक सूक्ष्मता है जिसे मैंने keys()
के साथ पाया।ऑटोविविफिकेशन कुंजी() और% {..} के साथ क्यों होता है?
$ perl -e 'use warnings; use strict; my $d = { "ab" => 1 }; my @e = keys(%{$d->{cd}});'
$ perl -e 'use warnings; use strict; my $d = { "ab" => 1 }; my %e = %{$d->{cd}};'
Can't use an undefined value as a HASH reference at -e line 1.
मुझे सबसे परेशान है कि क्यों पहला स्निपेट एक डीरेंसिंग त्रुटि नहीं देगा। जब मैं Data::Dumper
का उपयोग करता हूं, तो यह स्पष्ट हो जाता है कि पहले स्निपेट में, $d->{cd}
, {}
होने के लिए स्वत: एकीकृत है।
keys
को स्वचालित करने की आवश्यकता क्यों है? मैंने इसके लिए perldoc
पढ़ने की कोशिश की, एक संतोषजनक उत्तर नहीं मिला। keys
उपनाम सेट नहीं करता है ($_
, आदि) तो $d->{cd}
को सोचने के लिए पर्ल की आवश्यकता नहीं है, क्या वहां है? (मैं समझता हूँ कि अगर अभिव्यक्ति lvalue संदर्भ autovivification में होना के रूप में समझाया होता here की जरूरत है।
एक प्रासंगिक post।
https://rt.perl.org/Public/Bug/Display.html?id=118983 – ThisSuitIsBlackNot