http://www.perlmonks.org?node_id=1112207


in reply to Re^2: Dera Monks, Have create multiple file from one file now I want to match a pattern in each file at the same time do the replacement with adding one to the match pattern.
in thread Dera Monks, Have create multiple file from one file now I want to match a pattern in each file at the same time do the replacement with adding one to the match pattern.

Done some changes now $lines[0] working fine.. thanks for your help /K creating a problem.. But still issue with $line1

$lines[0] =~ s~/(4947000219)/$1+$n/~e;

Working fine

$lines[1] =~ 's{:20140924105028(\d+)}'{ my $tp = Time::Piece->strptime($1, DATE_FORMAT); ($tp+ONE_MINUTE*2*$n)->strftime(DATE_FORMAT);
 }e;

Error message

String found where operator expected at ./prog.pl line 33, near "$lines1 =~ 's{:20140924105028(\d+)}'" (Missing operator before 's{:20140924105028(\d+)}'?) syntax error at ./prog.pl line 33, near "$lines1 =~ 's{:20140924105028(\d+)}'" Can't use global $1 in "my" at ./prog.pl line 34, near "($1" syntax error at ./prog.pl line 41, near "}" Bareword "e" not allowed while "strict subs" in use at ./prog.pl line 36.

As m very new in perl you kind help would be highly appreciated.

  • Comment on Re^3: Dera Monks, Have create multiple file from one file now I want to match a pattern in each file at the same time do the replacement with adding one to the match pattern.
  • Select or Download Code

Replies are listed 'Best First'.
Re^4: Dera Monks, Have create multiple file from one file now I want to match a pattern in each file at the same time do the replacement with adding one to the match pattern.
by Anonymous Monk on Jan 05, 2015 at 21:56 UTC
    substitution operator is three or four delimiters s/// or s~~~ or s{}{} ... its never s~~ because replacement is missing s~regex~replacement~
Re^4: Dera Monks, Have create multiple file from one file now I want to match a pattern in each file at the same time do the replacement with adding one to the match pattern.
by pvaldes (Chaplain) on Jan 08, 2015 at 13:17 UTC

    I'll suggest this instead

    my $tp = Time::Piece->strptime($1, DATE_FORMAT); # out the replacement line print "tp is: $tp\n"; # we check $tp values here, just for the record ($tp+ONE_MINUTE*2*$n)->strftime(DATE_FORMAT);

    mmmh... this second line needs a var. Try something like this (untested):

    $tp = $tp+ONE_MINUTE*2*$n; print "tp is now: $tp\n"; # we check $tp again after the changes $lines[1] =~ 's{:20140924105028(\d+)}'{$tp}e;

    I see also a problem here with 's{}'{}e. Delete the "'" --> s{}{}e