hector89 has asked for the wisdom of the Perl Monks concerning the following question:

hii, i have written a code to comment out certail lines in a file based on some condition. i want to apply comment and uncomment thing on this type of data: data -------

<%--JS one Link Start <script main="js src="js/libs/"></script> <%--JS one Link End <%--JS second Link Start--%> <script main="js/scripts Main" src="js/libs"></script> <%--JS second Link End--%>
--------------------------------------- in this data if "one Link Start" is found without "--%>" and "second Link Start" is found with "--%>" character then trim "--%>" from "second Link Start" and append to "one Link Start" and vice versa. i have tried this code but not working. thanks in advance if anyone help me here.

#!/usr/bin/perl use warnings; use strict; 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 =~ /\s+.* one Link Start$/){ next unless($line=~/\s+.*second Link Start\s*--%>$/); $line =~ s/\s+--%>//; s/\s+.* one Link Start$/\s+.* one Link Start\s*--%>/gi; } elsif ($line =~ /\s+.* second Link Start$/){ next unless($line=~/\s+.*oneLink Start\s*--%>$/); $line =~ s/\s+--%>//; s/\s+.* second Link Start$/\s+.* second Link Start\s*--%>/gi; } } close $fh; print $line; open(my $output_fh, '>', 'hii.txt') or die "Unable to open file for writing: $!"; print $output_fh $line; close $output_fh;

Replies are listed 'Best First'.
Re: appending comment character in multiple lines based on condition
by hector89 (Novice) on Jun 11, 2012 at 09:24 UTC
    #!/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?

      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

A reply falls below the community's threshold of quality. You may see it by logging in.