undef पर्ल में

undef में पर्ल प्रोग्रामिंग भाषा में से एक है कि मूल्यों को समाहित किया जा सकता में एक चर है. यदि आप नहीं है एक मूल्य प्रदान करने के लिए एक चर, चर हो जाएगा undef.

यहाँ एक उदाहरण है पर्ल प्रोग्राम:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my $var;
print Dumper $var;

$var = 123;
print Dumper $var;

$var = undef;
print Dumper $var;

इस कार्यक्रम प्रदर्शित करेगा:

$VAR1 = undef;
$VAR1 = 123;
$VAR1 = undef;

पहले हम एक चर घोषित है, लेकिन नहीं सौंपा गया यह किसी भी मूल्य: my $var;. तो के साथ मदद print Dumper $var; लाया के बारे में जानकारी के मूल्य के लिए इस चर स्क्रीन (आप देख सकते हैं कि चर शामिल हैं undef). उसके बाद हम सौंपा एक चर संख्या 123और यह पता चला है स्क्रीन पर. और फिर कोड का उपयोग कर $var = undef; हम सौंपा चर undef और फिर से लाया के बारे में जानकारी ।

undef हो सकता है एक तत्व सरणी में या मूल्य में हैश:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my @arr = (1, undef, 'three');
print Dumper \@arr;

my %h = (
    a => undef,
);
print Dumper \%h;

अक्सर undef का इस्तेमाल किया जाता है के रूप में एक विशेष झंडा. उदाहरण के लिए, हो सकता है कि एक समारोह हमेशा एक नंबर देता है, लेकिन त्रुटि के मामले में रिटर्न undef.

नाम undef से आता है अंग्रेज़ी शब्द undefined("अपरिभाषित").

की तुलना में undef नहीं है

undef में एक ही मूल्य है । यह नहीं है एक स्ट्रिंग 'undef', यह नहीं है एक खाली स्ट्रिंग '' और यह संख्या नहीं 0. सभी विभिन्न मूल्यों.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

foreach my $var (undef, 'undef', '', 0) {
    print Dumper $var;
}

के मामले में इस हैश, कुंजी, मूल्य undef में ही नहीं है के रूप में हैश कोई ऐसी कुंजी है.

कैसे की जाँच करने के लिए पर undef

क्या जांच करने के लिए मूल्य undef समारोह प्रयोग किया जाता है defined. मूल्य है undef अगर समारोह defined झूठे रिटर्न:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

if (!defined($var)) {
    print 'var is undef';
}

यह बहुत आसान है लिखने के लिए एक सबा is_undefवापस आ जाएगी, जो सच है अगर यह पारित undef:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use feature qw(say);
use Data::Dumper;

sub is_undef {
    my ($maybe_undef) = @_;
    return !defined($maybe_undef);
}

my @arr = (1, undef, 'three');

foreach my $el (@arr) {
    say is_undef($el) ? 'undef' : 'not undef';
}

लेकिन सबसे ज्यादा नहीं है, और समारोह का उपयोग defined के बिना किसी भी चाबुक की मार.

वहाँ एक और तरीका है कैसे की जाँच करने के लिए है कि एक चर शामिल हैं undef है का उपयोग करने के लिए ऑपरेटर ~~ (यह ऑपरेटर कहा जाता है smartmatch). इस बयान में दिखाई दिया पर्ल 5.10 है, लेकिन पर्ल 5.18 उपयोग के इस ऑपरेटर एक चेतावनी देता है Smartmatch is experimental at script.pl line 8.. यहाँ एक नमूना कोड इस बयान के साथ:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

if ($var ~~ undef) {
    print 'var is undef';
}

अक्सर सबसे अच्छा तरीका है की जाँच करने के लिए undef एक समारोह है defined.

पर्ल undef और रूपांतरण करने के लिए JSON

पुस्तकालय के साथ काम करने के लिए JSON पर्ल में धर्मान्तरित पर्ल मूल्य undef में null में JSON:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use JSON::PP;

print encode_json {
    a => undef,
};

इस कोड को प्रदर्शित करेगा {"a":null}.

इसके विपरीत, जब से परिवर्तित करने JSON null हो जाता है undef:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use JSON::PP;
use Data::Dumper;

print Dumper decode_json '[null]';

इस कोड को प्रदर्शित करेगा:

$VAR1 = [
          undef
        ];

समारोह ref

परिणाम के समारोह ref के लिए सम्मान के साथ undef है एक खाली स्ट्रिंग ''. इस संबंध में undef से अलग नहीं है तार और संख्या. के लिए undef, तार और संख्या समारोह ref एक खाली स्ट्रिंग रिटर्न:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

foreach my $el ('asdf', undef, 100) {
    print Dumper ref($el);
}

एक बूलियन मान

जब का उपयोग कर undef में तार्किक संचालन undef एक झूठ है । इस कोड जाएगा स्क्रीन पाठ false:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

if (undef) {
    print 'true';
} else {
    print 'false';
}

उपयोग तार के साथ

मामले में यदि आप का उपयोग undef के संचालन के तार के साथ, बजाय undefहो जाएगा उपयोग एक खाली स्ट्रिंग '', लेकिन यह भी पता चलता है एक चेतावनी.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

print 'AAA' . $var . 'BBB';
▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

if ($var eq '') {
    print 'equal';
} else {
    print 'not equal';
}

पहले मामले में, एक चेतावनी दिखाया जाएगा Use of uninitialized value in concatenation (.) or string at script.pl line 10., दूसरे मामले में Use of uninitialized value in string eq at script.pl line 8..

उपयोग संख्या के साथ

मामले में यदि आप का उपयोग undef आपरेशनों के साथ संख्या है, बजाय undefहो जाएगा संख्या में इस्तेमाल किया जाता 0. लेकिन एक ही चेतावनी प्रकट होता है ।

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

print $var + 4;
▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

if ($var == 0) {
    print 'equal';
} else {
    print 'not equal';
}

पहले मामले में, एक चेतावनी दिखाया जाएगा Use of uninitialized value $var in addition (+) at script.pl line 8., दूसरे मामले में Use of uninitialized value $var in numeric eq (==) at script.pl line 8..

यह दिलचस्प है कि का उपयोग करते समय वेतन वृद्धि ऑपरेटर ++ नोटिस नहीं:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var;

print $var++;

संबंधित विषयों

अन्य लेख