0
$ args [0]は、1回以上の文字列への参照です。私は毎回変化する秒数をシフトしていますが、変更された時間を元の文字列に戻す(置き換える)方法を見つける必要があります。どんな助けもありがとうございます。おおよそ私が働いているものは次のとおりです:Perlで文字列内の1つ以上の文字列を置き換える方法
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 ///'を探していますか? eキーで 's /// e'を使います。 – gaussblurinc
または 'split'関数と' join'関数を見てください。彼らはあなたの仕事をよりシンプルにするでしょう;) – gaussblurinc
時間を扱うことができるモジュールを使用してみませんか? [DateTime](http://search.cpan.org/perldoc?DateTime)や[Time :: Piece](http://search.cpan.org/perldoc?Time::Piece)と同様です。感謝! – TLP