$args[0] is a reference to a string containing one or more times. I am shifting each time by a variable number of seconds, but then I need to find a way to store (replace) the changed times back into the original string. Any help is appreciated. Here is roughly what I am working with:
my $TIMEREGEX = qr/(\d{2}:\d{2}:\d{2}\.\d{3}|\d{2}:\d{2}:\d{2})/x;
if ( my @sTime = ${$args[0]} =~ /$TIMEREGEX/g )
{
warn "\ttime(s) found @sTime\n" if $main::opt{d};
for my $i ( 0..$#sTime )
{
$sTime[$i] =~ /(\d{2}):(\d{2}):(\d{2})(\.(\d{3}))?/;
my $epoch_time = ( $1 * 3600 ) + ( $2 * 60 ) + $3;
$epoch_time += $epoch_shift;
my @f;
$f[0] = $epoch_time % 86400 / 3600; # hours
$f[1] = $epoch_time % 3600 / 60; # minutes
$f[2] = $epoch_time % 60; # seconds
my $save = $sTime[$i];
$sTime[$i] = sprintf ( "%02d:%02d:%02d", $f[0], $f[1], $f[2] );
$sTime[$i] .= $4 if defined ( $4 );
warn "\tTimeShift $save => $sTime[$i]\n" if $main::opt{d};
### some other stuff
}
# ${$args[0]} = "$1$t[0]$4$t[1]$7$t[2]$10";
### save the changes to ${$args[0]} !
}
s///? and also uses///ewithe-key.splitfunction andjoinfunction. they will make your work more simple ;)