in reply to How to remove non-numbers from string

UPDATE: Sound enough code (and can be adapted (below) to OP's needs), but NOT a complete answer to OP's question, which I mis-read.

Use the inverse of your regex, namely:

$string=~ s/\d//g;

like this without having to add additional tests to deal with strings which have no numbers:

C:\>perl -E "my $string=('data12.csv');$string=~ s/\d//g;say $string; data.csv C:\>perl -E "my $string=('data.csv');$string=~ s/\d//g;say $string;" data.csv

Replies are listed 'Best First'.
Re^2: How to remove non-numbers from string
by ww (Archbishop) on Jun 22, 2015 at 13:48 UTC

    Illustration of adaptation (see the parent, Re: How to remove non-numbers from string)

    #! /usr/bin/perl use 5.018; use strict; use warnings; my @strings=('data.csv', 'data12.csv', '123data.csv', 'data000.csv', ' +data.csv0', '123.', '1data2.csv'); for my $string(@strings) { if ( $string =~ /(\d+)/g ) { my $revised = $1; say "\$string was:\t$string;\t RESULT: $revised (from Ln 11)"; } else { # i.e., if there are no digits my $revised = "0"; say "\$string was:\t$string; \t RESULT: $revised (from Ln 14)" +; } } =head C:\>1131407.pl $string was: data.csv; RESULT: 0 (from Ln 14) $string was: data12.csv; RESULT: 12 (from Ln 11) $string was: 123data.csv; RESULT: 123 (from Ln 11) $string was: data000.csv; RESULT: 000 (from Ln 11) $string was: data.csv0; RESULT: 0 (from Ln 11) #problem1 $string was: 123.; RESULT: 123 (from Ln 11) $string was: 1data2.csv; RESULT: 1 (from Ln 11) #problem2
    • # problem1: How do you want to distingush this (or 'data0.csv') from an element with no zeros?
    • # problem2: ... and what about an element with more than one set of digits, such as "1data2.csv"

    ++$anecdote ne $data (nor does it eq code)