0
$ args [0]은 한 번 이상 포함 된 문자열에 대한 참조입니다. 각 시간을 초 단위로 변경하고 있지만 변경된 시간을 원래 문자열에 저장 (바꾸기)하는 방법을 찾아야합니다. 어떤 도움을 주셔서 감사합니다. 대략 다음과 같이 작업하고 있습니다.Perl에서 문자열 내의 하나 이상의 문자열을 바꾸는 방법
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 ///'을 (를) 찾고 있습니까? 또한's /// e'와'e'-key를 사용합니다. – gaussblurinc
또는'split' 함수와'join' 함수를보십시오. 그들은 당신의 일을 더 간단하게 만들 것입니다;) – gaussblurinc
시간을 처리 할 수있는 모듈을 사용하지 않겠습니까? [DateTime] (http://search.cpan.org/perldoc?DateTime) 또는 [Time :: Piece] (http://search.cpan.org/perldoc?Time::Piece)와 유사합니다. 덕분에 – TLP