in reply to How do I drop leading zeros from a date like 07/04/2001 to read 7/4/2001??

Just off the top of my head:

my $date = '07/04/2001'; $date = join '/', map { $_+0 } split /\//, $date; print $date;

That statement should be read right to left. It splits the $date on the forward slash and passes each segment to the map. map adds zero to each, which forces the string to be numeric, which is what drops that leading zero. The final join restores it to the original format.

You also might find the following a little easier to understand:

$date =~ s!^0+!!; # trim leading zeroes $date =~ s!/0+!/!g; # trim zeroes after a /

Update: Just saw Kanji's better answer on another node (the parent was cross-posted by original author):

$date =~ s/\b0//g;

Cheers,
Ovid

Join the Perlmonks Setiathome Group or just click on the the link and check out our stats.

Replies are listed 'Best First'.
Re: Re: How do I drop leading zeros from a date like 07/04/2001 to read 7/4/2001??
by Kanji (Parson) on Nov 27, 2001 at 09:12 UTC

    Since the cross-post and my response seem to have dissappeared, I think it's worth restating that s/\b0//g will also truncate the year if you use the short form (01) instead of the long (2001).

    A more flexible approach (that leaves the year intact even if it does start with an 0) might be something like ...

    sub unpad_datestring { ## Strip the leading 0s from the day and month portions of ## a YMD-style datestring. ## The only mandatory argument is the date string itself, ## which assumes the string is delimeted by a slash and ## ordered American-style ( MDY ). If that assumption is ## wrong, you can override either or both via the 'delim' ## and 'order' arguments ... ## '07/04/2001' ## '04/07/01', 'order' => [qw( d m y )] ## '01.07.04', 'order' => [qw( y m d )], 'delim' => '.' my $date = shift or return; my %args = ( 'order' => [qw(d m y)], 'delim' => '/', @_, ); my @date = split /\Q$args{'delim'}/, $date; for ( my $x = 0; $x < @date; $x++ ) { $date[$x] = int $date[$x] if lc $args{'order'}->[$x] =~ /^[dm]$/; } return join $args{'delim'}, @date; }

        --k.