### 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.

Replies are listed 'Best First'.
Re^3: How to split an integer??
by tobyink (Canon) 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

"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

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'
```my \$number = 23;
my @bits = split //, \$number;
my \$total;
for my \$bit (@bits) {
\$total += \$bit;
}

print "Number=\$number Total=\$total\n";
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);

Create A New User
Domain Nodelet?
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 imbibing at the Monastery: (3)
As of 2023-01-29 18:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?

No recent polls found

Notices?