in reply to appending comment character in multiple lines based on condition

#!/usr/bin/perl use warnings; use strict; my $pattern1='Prod Link Start'; my $pattern2='Dev Link Start'; open my $fh, '<', 'hii.txt' or die "Can't open the damn file for readi +ng!: $!"; my @file_content; while ( my $line = <$fh> ){ chomp $line; if ( $line =~/$pattern1/i && !/--%>$/){ print $line; $line.="--%>"; push @file_content, "$line\n"; next; } elsif ( $line =~/$pattern1/i && /--%>$/){ $line = ~ s/--%>//g; push @file_content, "$line\n"; next; } if ( $line =~/$pattern2/i && !/--%>$/){ print $line; $line.="--%>"; push @file_content, "$line\n"; next; } elsif ( $line =~/$pattern2/i && /--%>$/){ $line = ~ s/\s--%>//; push @file_content, "$line\n"; next; } push @file_content, "$line\n"; } close $fh; open $fh, '>', 'hii.txt' or die "Can't open the damned file for writin +g: $!"; print $fh @file_content; close $fh;

in this code each time it's appending "--%>"character even if condition becomes false in first if condition.i think there is some problem in using and operator.in this code it behaves meaningless.can anyone tell me where am i wrong?

  • Comment on Re: appending comment character in multiple lines based on condition
  • Download Code

Replies are listed 'Best First'.
Re^2: appending comment character in multiple lines based on condition
by stevieb (Canon) on Jun 11, 2012 at 14:33 UTC

    Change this line:

    if ( $line =~/$pattern1/i && !/--%>$/){

    to this:

    if ( $line =~/$pattern1/i && $line !~ /--%>$/){

      i'm able to delete or append "--%>" to string but problem is if i found "--%>" onone pattern it should be deleted from that pattern and append to second pattern at the same time...so i'm notable to figure out how i should traverse upto next line where second pattern exists and by checking condition of first pettern it should do changes on second pattern accordingly.

      #!/usr/bin/perl use warnings; use strict; my $pattern1='Prod Link Start'; my $pattern2='Dev Link Start'; open my $fh, '<', 'hii.txt' or die "Can't open the damn file for readi +ng!: $!"; my @file_content; while ( my $line = <$fh> ){ chomp $line; if ( $line =~/$pattern1/i){ # print $line; #$line.="--%>"; my $var = substr($line, -4); print $var; if($var !~/--%>/) { $line.= "--%>"; print $line; } elsif($var = ~/--%>/) { $line = substr($line, 0, - 4); print $line; } push @file_content, "$line\n"; next; } if ( $line =~/$pattern2/i){ # print $line; #$line.="--%>"; my $var = substr($line, -4); print $var; if($var !~/--%>/) { $line.= "--%>"; print $line; } elsif($var = ~/--%>/) { $line = substr($line, 0, - 4); print $line; } push @file_content, "$line\n"; next; } push @file_content, "$line\n"; } close $fh; open $fh, '>', 'hii.txt' or die "Can't open the damned file for writin +g: $!"; print $fh @file_content; close $fh;

      this code just finds the pattern and append or delete --%> on condition.but how i should delete it from one pattern and append it to other pattern.anyone suggest me