Since this is Perl and there is always more than one way.... you can use 2 regexes and then you don't need sprintf. I don't know which actually executes faster.
Code follows showing these cases..
a. could use one regex to handle 2 digit day, another for 1 digit day
b. probably better is to handle single digit day, then swap order instead of combining the replace and swap
c. doesn't handle single digit month, so could use a 3rd regex to fix that
d. finally, could fix any single digit and then swap order
use strict;
use warnings;
my $x='11-3-1936';
$x=~ s/(\d+)-(\d\d)-(\d+)/$3-$1-$2/; #2 digit day
$x=~ s/(\d+)-(\d)-(\d+)/$3-$1-0$2/; #1 digit day
print "$x\n"; # 1936-11-03
$x='2-5-1966';
$x=~ s/(\d+)-(\d)-(\d+)/$1-0$2-$3/; # fix 1 digit day
$x=~ s/(\d+)-(\d+)-(\d+)/$3-$1-$2/; # swap order
print "$x\n"; # 1966-2-05 doesn't fix single digit month
$x='2-5-1966';
$x=~ s/(\d+)-(\d)-(\d+)/$1-0$2-$3/; # fix 1 digit day
$x=~ s/(\d)-(\d+)-(\d+)/0$1-$2-$3/; # fix 1 digit month
$x=~ s/(\d+)-(\d+)-(\d+)/$3-$1-$2/; # swap order
print "$x\n"; # 1966-02-05 ok, but uses 3 regexes
$x='2-5-1966';
$x=~ s/\b(\d)\b/0$1/g; # fix any single digit
$x=~ s/(\d+)-(\d+)-(\d+)/$3-$1-$2/; # swap order
print "$x\n" # 1966-02-05
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|