Pathologically Eclectic Rubbish Lister PerlMonks

### Re: Converting a list of numbers to use a range operator

by LanX (Bishop)
 on Mar 23, 2013 at 20:50 UTC ( #1025072=note: print w/replies, xml ) Need Help??

non-strict hack :)
```use Data::Dump qw/pp/;

@array = (10, 11, 12, 2, 3, 4, 7);

@a = sort {\$a <=> \$b} @array;

\$first = \$last = shift @a;       # init start
push @a,"inf";                   # infinity end

for \$now (@a) {
unless ( \$last+1 == \$now ) {
push @ranges,[\$first,\$last]; # todo: one element ranges
\$first=\$now;
}
\$last=\$now;
}

pp @ranges;

not sure how you wanna handle one element ranges, so I kept it up to you:

([2, 4], [7, 7], [10, 12])

Cheers Rolf

( addicted to the Perl Programming Language)

Replies are listed 'Best First'.
Re^2: Converting a list of numbers to use a range operator
by Anonymous Monk on Mar 24, 2013 at 13:22 UTC
OK, very short code, but why does this push @a,"inf" work? Where is this "inf" documented?
> but why does this push @a,"inf" work?

inf and -inf are special numeric constants

```  DB<159> \$a=inf
=> "inf"

DB<160> --\$a
=> "inf"

DB<161> ++\$a
=> "inf"

in this case they are handy, because \$now+1 == inf won't raise a warning

```  DB<116> use warnings;5=="inf"
=> ""

DB<117> use warnings;5=="WhatEver"
Argument "WhatEver" isn't numeric in numeric eq (==) at (eval 47)[mult
+i_perl5db.pl:644] line 2.

> Where is this "inf" documented?

no idea, I scanned the perldocs for X<inf> w/o success.

Cheers Rolf

( addicted to the Perl Programming Language)

UPDATE: deleted wrong example about incrementing inf

Create A New User
Node Status?
node history
Node Type: note [id://1025072]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (7)
As of 2018-03-17 17:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
When I think of a mole I think of:

Results (225 votes). Check out past polls.

Notices?