Hi,

This is how I'd do it:

$data = "[03/12/2002:14:19:50]"; # to become: '2002-03-12 14:19:50'
$match = '\[(\d\d)\/(\d\d)\/(\d{4}):(\d\d):(\d\d):(\d\d)\]';


if ( $data =~ /$match/){
    $replace = "$3-$1-$2 $4:$5:$6";   # do variable subs explicitly after the
pattern match
    $data =~ s/$match/$replace/e;
    print $data, " replaced!\n";
}else{
    print $data, " failed to replace.\n";
}

Of course, I'm sure TIMTOWTDI...

Incidentally, I strongly recommend visiting www.perlmonks.org. This stuff is
bread-and-butter to them :-)

Tim


"Bruce A. Burdick, Jr." wrote:

> Anyone have any idea how this might be accomplished? :
>
> For a normalization scheme, I have match and replace strings stored in
> variables (because they vary, of course) brought in from XML files. The
> replace strings depend on what is found in the match string. The problem?
> The replacement string is taken literally no matter what variations I've
> tried. Some examples:
>
>     $data = '[03/12/2002:14:19:50]'; # to become: '2002-03-12 14:19:50'
>     $match = '\[(\d\d)\/(\d\d)\/(\d{4}):(\d\d):(\d\d):(\d\d)\]';
>     $replace = '\3-\1-\2 \4:\5:\6';
>
>     unless ( $data =~ s/$match/$replace/ )
>     {
>         print $data, " failed to replace.\n";
>     }
>     else
>     {
>         print $data, " replaced!\n";
>     }
>
> This yields:
>
>     \3-\1-\2 \4:\5:\6 replaced!
>
> Not exactly what I'm looking for.
>
> I've tried:
>
>     $replace = '$3-$1-$2 $4:$5:$6';
>
> Doesn't work. I've tried it with double-quotes. I've wrapped eval around it
> several different ways. I've tried the 'e' option and the 'x' option on the
> s/// operator. qr// is only for match strings, it seems. I'm stumped.
>
> I'll have a lot of different replacement strings stored in the schema data
> -- a growing collection. So hard-coding them is the last option.
>
> Am I overlooking something simple?
>
> -B...

Reply via email to