कर सकते हैं undef किया जा करने के लिए एक हैश कुंजी पर्ल में?

जवाब नहीं है.

undef नहीं किया जा सकता है एक हैश कुंजी में पर्ल. लेकिन वहाँ बारीकियों रहे हैं जो आप हो सकता है लगता है कि कर सकते हैं. नीचे दिए गए विवरण.

क्या है एक हैश

एक डेटा संरचनाओं में मौजूद है कि प्रोग्रामिंग भाषा पर्ल हैश है. एक हैश है एक unordered सेट मूल्यों की है. यहाँ एक उदाहरण है हैश:

my %h = (
    aa => 1,
    bb => 2,
);

इस हैश संग्रहीत किया जाता है, के दो जोड़े मूल्यों. कुंजी नाम के साथ 'aa' संग्रहीत मूल्य 1, और में कुंजी नाम के साथ 'bb' दुकानों के मूल्य 2. प्राप्त करने के लिए इन मूल्यों का उपयोग करें वाक्य रचना $h{aa} और $h{bb}.

क्या है undef

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

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my $var;

print Dumper $var;

कार्यक्रम को प्रदर्शित करेगा पाठ $VAR1 = undef;.

undef अभी भी उपलब्ध है यदि आप का उपयोग एक nonexistent सरणी तत्व या एक अस्तित्वहीन कुंजी में एक हैश. आप कर सकते हैं स्पष्ट रूप से असाइन undef चर: $var = undef;.

गलत उपयोग 1

यहाँ एक नमूना कार्यक्रम है जो लगता है undef हो सकता है कुंजी हैश:

▶ Run
#!/usr/bin/perl

my %h = (
    undef => 'asdf',
);

print $h{undef};

कार्यक्रम को प्रदर्शित करता है पाठ asdf. यानी की तरह हम बनाया में हैश कुंजी undef, और फिर मैं मूल्य के लिए इस कुंजी. लेकिन यह नहीं है । इस उदाहरण में, मान संग्रहीत किया जाता है कुंजी 'undef', यानी पंक्ति 'undef', नहीं एक वास्तविक undef.

इस वजह से दो विशेषताएं है ।

जब आप बनाने के लिए हैश हम इसे बनाया है में एक महत्वपूर्ण मूल्य कोड का उपयोग कर undef => 'asdf',. इस कोड का उपयोग करता है ऑपरेटर =>. की ख़ासियत यह बयान है कि कुछ स्थितियों में वह ले जा सकते हैं क्या छोड़ दिया है के रूप में एक स्ट्रिंग. उन्होंने निष्कर्ष निकाला है की तरह क्या है के लिए छोड़ दिया => में उद्धरण चिह्न. undef => 'asdf', वास्तव में है 'undef' => 'asdf',.

दूसरी विशेषता यह है कि हम कैसे प्राप्त मूल्य से हैश कुंजी के द्वारा. हम वाक्यविन्यास का उपयोग $h{undef}. और फिर पर्ल सोचता है कि क्या है में घुंघराले ब्रेसिज़ एक स्ट्रिंग है. क्या हम यहाँ लिखा है के रूप में ही है $h{'undef'}.

यकीन है कि हो सकता है कि यह वास्तव में है के रूप में यदि आप स्क्रिप्ट को चलाने plugging द्वारा एक विशेष मॉड्यूल है कि के बजाय कोड को क्रियान्वित करने से पता चलता है कैसे पर्ल समझता है इस कोड. perl -MO=Deparse script.pl. यहाँ उत्पादन:

my(%h) = ('undef', 'asdf');
print $h{'undef'};
script.pl syntax OK

ग़लत उपयोग के 2

यहाँ का एक और उदाहरण है जो कोड गलती से लगता है कि undef हो सकता है कुंजी हैश. ओह, वहाँ यह है हम undef, लाइन नहीं 'undef':

▶ Run
#!/usr/bin/perl

my $var = undef;

my %h = (
    $var => 'asdf',
);

print $h{$var};

कार्यक्रम को प्रदर्शित करता है पाठ asdf. यानी, हम क्या लगता है कि हम बनाया है में मूल्य हैश कुंजी के द्वारा undef.

लेकिन वास्तव में, हम रखा है मूल्य में महत्वपूर्ण '' (एक खाली स्ट्रिंग). अगर पीछे के अंत करने के लिए इस कार्यक्रम लाइन use Data::Dumper और warn Dumper \%h;, शुरू करने के बाद स्क्रीन पर है कि वास्तव में की तरह लग रहा है एक हैश:

$VAR1 = {
          '' => 'asdf'
        };

चर $var के एक मूल्य होता है undef, लेकिन में इस्तेमाल किया जब $var => 'asdf', और $h{$var} undef द्वारा बदल दिया है, एक खाली स्ट्रिंग ''.

यदि आप जोड़ने के लिए कोड में use strict; और use warnings; (जो लगभग हमेशा काम करने लायक) है, तो उत्पादन में यह देखा जाएगा कि पर्ल इस बारे में चेतावनी दी उपयोग:

Use of uninitialized value $var in list assignment at script.pl line 8.
Use of uninitialized value $var in hash element at script.pl line 12.

सारांश

undef नहीं किया जा सकता है, एक के मूल्य में एक महत्वपूर्ण पर्ल हैश. चाबियाँ में एक पर्ल हैश हमेशा के लिए एक लाइन है । (केवल निर्दिष्ट है कि एक खाली स्ट्रिंग '' भी किया जा सकता है महत्वपूर्ण). और मूल्यों में हैश बिल्कुल किसी भी हो सकता है और वहाँ कोई समस्या नहीं है करने के लिए जा undef.

अन्य लेख