कैसे पर्ल धर्मान्तरित तार करने के लिए संख्या

किसी भी स्ट्रिंग में पर्ल प्रोग्रामिंग भाषा में इस्तेमाल किया जा सकता है के रूप में एक संख्या है. यहाँ एक उदाहरण है:

▶ Run
#!/usr/bin/perl

my $str = 'Hello';

print $str + 100;

प्रोग्राम संख्या को प्रदर्शित करेगा 100. स्ट्रिंग 'Hello' में इस्तेमाल किया जब अंकगणितीय आपरेशनों संख्या है 0. संख्या 0 प्लस 100 होगा 100 और है कि क्या हम स्क्रीन पर देखेंगे. अक्सर इस्तेमाल किया शब्द "संख्यात्मक संदर्भ" का उल्लेख करने के लिए मूल्य क्या है, आपरेशन के रूप में इस्तेमाल किया है की एक संख्या.

स्ट्रिंग 'Hello' में एक संख्यात्मक संदर्भ में यह 0. लेकिन नहीं सभी तार पर्ल में शून्य हैं ।

अगर शुरुआत में एक पंक्ति के अंक रहे हैं, तो नंबर हो जाता है, इन संख्याओं का योग. यहाँ एक उदाहरण है:

▶ Run
#!/usr/bin/perl

my $str = '23ASDF';

print $str + 0;

प्रोग्राम संख्या को प्रदर्शित करेगा 23.

यहाँ कुछ उदाहरण हैं, स्ट्रिंग और संख्या में जो में यह बदल जाता है में इस्तेमाल किया जब एक संख्यात्मक संदर्भ:

''          -> 0
'1.0ASDF'   -> 1
'1.2ADF'    -> 1.2
'0123ASDF'  -> 123
' 34ASDF'   -> 34
'0x13ABC'   -> 0
'0b10ABC'   -> 0
'1e+25ASDF' -> 1e+25
' +7ASDF'   -> 7
'-13ABC'    -> -13
'--13ABC'   -> 0
' 10 100'   -> 10

यहाँ एक स्क्रिप्ट को प्रदर्शित करेगा कि एक ही डेटा:

▶ Run
#!/usr/bin/perl

use feature qw(say);

foreach my $str ('', '1.0ASDF', '1.2ADF', '0123ASDF', ' 34ASDF',  '0x13ABC', '0b10ABC', '1e+25ASDF', ' +7ASDF', '-13ABC', '--13ABC', ' 10 100') {
     say "'$str' -> " . ($str + 0);
}

use warnings;

अगर पर्ल स्क्रिप्ट है use warnings; (जो लगभग हमेशा काम करने लायक) है, तो एक स्ट्रिंग का उपयोग में संख्यात्मक संदर्भ प्रिंट होगा पर STDERR चेतावनी:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $str = 'Hello';

print $str + 100;

यहां कार्यक्रम की आउटपुट:

Argument "Hello" isn't numeric in addition (+) at script.pl line 8.
100

सिफारिश

वहाँ है एक सिफारिश नहीं करने के लिए इस सुविधा का उपयोग की भाषा है । अगर आप की जरूरत है पाने के लिए एक संख्या से स्ट्रिंग, यह स्पष्ट रूप से की मदद के साथ नियमित अभिव्यक्ति. तो आप कर सकते हैं सिर्फ का वर्णन के स्वरूप में जो आप की उम्मीद करने के लिए डेटा प्राप्त और सक्षम हो जाएगा को पकड़ने के लिए जब स्थिति डेटा में आता है, गलत प्रारूप (के बजाय चुप की प्राप्ति शून्य) ।

यहाँ एक नमूना कोड है । हम जानते हैं के बारे में डेटा पर स्ट्रिंग की शुरुआत एक पूर्णांक है, और हम की जरूरत है की गणना करने के लिए सभी का योग संख्या सभी पंक्तियों में.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my @strings = (
    '10 apples',
    '0 potatoes',
    '8 oranges',
    'nine lemons',
);

my $sum = 0;

foreach my $str (@strings) {
    if ($str =~ /^([0-9]+)/) {
        $sum += $1;
    } else {
        die "String '$str' is in incorrect format";
    }
}

print $sum;

जब आप चलाने के लिए इस कार्यक्रम में हम त्रुटि प्राप्त String 'nine lemons' is in incorrect format at script.pl line 19.. धन्यवाद हम देखते हैं कि डेटा में वहाँ एक समस्या है । पर निर्भर करता है कि हम कैसे कर सकते हैं या तो सही डेटा के बजाय एक स्ट्रिंग 'nine lemons' स्ट्रिंग का उपयोग करें '9 lemons', या आप कर सकते हैं स्पष्ट रूप से उपेक्षा इस पंक्ति में एक पाश next if $str eq 'nine lemons'.

अगर हम किया था प्रयोग किया जाता मानक तरीका है कि पर्ल स्ट्रिंग में कनवर्ट करने के लिए एक नंबर, के पाश के लिए किया जाएगा बहुत सरल है:

foreach my $str (@strings) {
    $sum += $str;
}

लेकिन इस मामले में, हम पता नहीं होता है कि डेटा से मेल नहीं खाती है प्रारूप हम उम्मीद करते हैं.

अन्य लेख