में definedness के लिए परीक्षण जब एक चर निर्दिष्ट और पर्ल में एक ऑपरेशन में definedness के लिए यह परीक्षण करने के लिए कोशिश कर रहा है, एक if
की हालत में उदाहरण के लिए उपयोगी होगा के रूप में, यह स्वाभाविक मेरे लिए करने के लिए प्रतीत होता है लिखें:समझौता पूर्वता जब बताए और पर्ल
if (defined my $thing = $object->get_thing) {
$thing->do_something;
}
जहां तक मेरी समझ जाता है, defined
एक rightward list operator, जो काम की तुलना में कम है की पूर्वता है, इसलिए मैं ऊपर मेरी कोड के बराबर होने की अपेक्षा करेंगे:
if (defined (my $thing = $object->get_thing)) {
$thing->do_something;
}
जबकि उत्तरार्द्ध, संश्लेषित कोड काम करता है, पूर्व में निम्नलिखित घातक त्रुटि उत्पन्न होती है: "स्केलर असाइनमेंट में परिभाषित ऑपरेटर को संशोधित नहीं किया जा सकता"।
यह ब्रांड्स जोड़ने के लिए एक बड़ा सौदा नहीं है, लेकिन मुझे समझना अच्छा लगेगा कि पहला संस्करण क्यों काम नहीं करता है, उदा। किस तरह की "चीज़" defined
है और इसकी प्राथमिकता क्या है?
क्या आप जानते हैं कि 'निर्धारित' की असाइनमेंट की तुलना में अधिक प्राथमिकता क्या है? उदाहरण के लिए, 'मेरा $ test =' test 'प्रिंट प्रिंट करें "परीक्षण" प्रिंट करता है। – scozy
मैंने अपना जवाब अपडेट किया है। – ikegami
@scozy: प्राथमिकता के साथ ऑपरेटर के रूप में 'मेरा' के बारे में मत सोचो। कीवर्ड 'मेरा' एक विशेष पार्सिंग प्रेरित करता है। – gensym