Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re^2: How to split an integer??

by nvivek (Vicar)
on Dec 06, 2012 at 10:32 UTC ( #1007521=note: print w/ replies, xml ) Need Help??


in reply to Re: How to split an integer??
in thread How to split an integer??

We can also do it in simple manner by using numeric operator for comparison without having regular expression used in the mentioned thread.


Comment on Re^2: How to split an integer??
Re^3: How to split an integer??
by tobyink (Abbot) on Dec 06, 2012 at 10:39 UTC

    I prefer the regular expression to numeric comparison, because...

    use strict; my $var = "xyz"; print "it's a single-digit number!!\n" if $var < 10;

    Is "xyz" really a single digit number?

    perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

      But my qn is i have a variable say $a= 23 , now i need to add it as 2+3 which should give me ans 5 ... hw to do this ???

      23 s stored as a single byte hence i cant split. But in words we can split character by character of a word in an array

      my @a = qw (data); foreach $aa(@a){ print $aa."\n"; }

      the above code will not work the sane for integers

        my $number = 23; my @bits = split //, $number; my $total; for my $bit (@bits) { $total += $bit; } print "Number=$number Total=$total\n";

        "23 s stored as a single byte hence i cant split."

        Byte?! You're thinking in C terms! Go wash your mouth out with soap right now! ;-)

        In Perl, strings and integers are both represented by the same data type - scalars. (Internally Perl represents scalars as a C struct which has separate string and integer slots. But you don't normally need to worry about such concerns.) If you have a variable that contains an integer value, such as 23, and pass it to something that expects a string, like split, that integer will be silently converted to a string.

        Here's exactly the same function I posted before, only now I'm using the integer 23 as the input...

        use 5.010; use strict; use warnings; # 23 is an integer. # say digit_sum(23); # This expression is used to test that a string consists of a single # digit. We use it a couple of different places, so we'll get define # it once here. # use constant DIGIT => qr/^[0-9]$/; # This is the function which adds digits # sub digit_sum { my $string = shift; # Otherwise, split into digits. my @digits = grep { $_ =~ DIGIT } # keep only the numeric characters split '', $string; # split into characters # Add the digits together. my $sum = 0; $sum += $_ for @digits; # Handle the trivial case. # If $sum is just a single digit, return it as-is. return $sum if $sum =~ DIGIT; # Otherwise, recurse. return digit_sum($sum); }
        perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'
        For splitting integer value, need to specify pattern explicitly as null string as follows.
        # $number contains numerical value which is greater than 9 split('', $number);

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1007521]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (9)
As of 2014-07-23 04:58 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:









    Results (133 votes), past polls