in reply to Removing non digits

The i does case insensitive matching and since you are removing all upper and lower case letters it will just slow things down (if it does anything at all)

$n =~ s/\D+//g;

This is closer to what you want. This says remove all groups of things that aren't numbers and the /g says to keep doing it until the string is all gone. The =~ says that what follows is a Regular Expression to be applied to the lvalue ($n in this case). I used $n since that was the looping variable in your foreach.I do not know in this case if \D+ is more efficient than just \D which would remove the non digits one at a time.

Also note that this will modify the values in the array such that it will be changed as a result of the foreach.

Also tr would be faster.

$n =~ tr/0-9//cd;

This says remove from $n anything that isn't a 0-9. c says complement the set given ie not 0-9 and d says delete things in the match list that do not appear in the replacement list.

Update: Oops as noted the searchpattern is already taken to be a character list so the brackets do not work like in a RE. mea culpa

Replies are listed 'Best First'.
Re: Re: Removing non digits
by sauoq (Abbot) on Jul 23, 2003 at 17:57 UTC
    $n =~ tr/[0-9]//cd;

    That should be tr/0-9//cd; (no brackets) because tr/// expects a character class, not a regular expression.

    -sauoq
    "My two cents aren't worth a dime.";