in reply to Re^4: text matching
in thread text matching

Thanks. Please delete the line:

$/ = undef;

and let me know if it works.

Replies are listed 'Best First'.
Re^6: text matching
by prassi (Acolyte) on Jun 16, 2012 at 07:20 UTC

    it worked, can you help out what actually

    $/ = undef;

    would do. I am a newbie to perl try things to understand

      A few things to keep in mind as you write more code.

      • Always use strict;
      • use autodie;
      • When opening file handles, don't use a bare file handle. For example, use $file instead of file
      • When opening file handles, use three arguments: open my $fh, '>', $filename (see this for a brief explanation)
      • I strongly recommend explicitly naming your variables if you and/or your colleagues are learning perl. It can make the code much more readable; for example, compare your while loop to mine.

      I quickly cleaned up the code you posted according to my suggestions so you can see them side-by-side:

      #!/bin/perl5.8.6 use strict; use warnings; use diagnostics; use File::Basename; my @files = <../tryremove/*>; #This is the destination path where the comment removed files are crea +ted. my $path1 = "C:/Projects/tryremove/c"; foreach my $file (@files) { my $filename = basename($file); open $file1, "<", $file; open $file2, ">", "$path1/$filename"; while ( my $line = <$file1> ) { $line =~ s# .* report s? .* ; .* ##sx; print $file2 $line; } close $file1; close $file2; }

      Disclaimer: It's late and I'm pretty sleepy. Although I think it should be fine, test it to make sure it behaves the same as your fixed script!

      - Mike

        Thanks a lot Mike for the tips and the code you posted works fine.

        Regards,

        -Prasad

      That's good to hear!

      $/ is the input record separator and is essentially used to specify what character should be used to delimit lines. The default input record separator is \n (a.k.a. the newline character).

      However, in the context that you have it, $/ = undef; tells perl that there is no input value separator so that the entire line gets read into a scalar on the subsequent line of your script: $_ = <file1>;