Prabu wrote:
> 
>    Hi,

Hello,

> I have wrote a script to search for a pattern and replace it in
> all files of a directory,that i specified at commandline.
> I want another one thing is to be done in the script.That's,it should
> search only for the type of files I specified at commandline.
> That is,it should get the extension of file name and search only those
> files in the directory.
> 
> I have made a attempt in this script,but it goes on asking extension for
> all the files in directory.

That is because you are asking for the extension inside the loop.  Just
ask before you enter the loop.


> Plz help me in getting the things right in the following script.
> Here I have use Split operator to get the extension of filename.
> 
> #! /usr/bin/perl

use warnings;
use strict;


> print "Enter a path name: ";
> my $path=<STDIN>;
> chomp($path);
> opendir THISDIR, "$path" or die "serious dainbramage: $!";

perldoc -q vars


> my @allfiles = readdir THISDIR;
> 
> # get all files
> foreach $file (@allfiles){
> $filetoopen = $path ."/" .$file;
> 
> # filter to check the type of file
> print "Enter the type of extension:";
> my $ext=<STDIN>;
> chomp($ext);

Move the previous four lines outside of the foreach loop.


> ($str1,$str2) = split(/./, $filetoopen);

The . character is special in a regular expression, it matches all
characters except the newline character.


> if($str2 eq $ext)
> {
> print $str2;
> print $filetoopen;
> open(IN, "<$filetoopen") || die "cannot open file\n";
> open(OUT, ">$test") || die "cannot open file\n";

Where did $test come from?  You are using $! in your opendir() error
message, you should use it here as well.


> while (<IN>){
> if (/$com/){
>         s/$com/td>\n<\\script>/g;
> }
> if (/$img/){
>         s/$img/\n<script>\n<img/g;
> }
> if (/$pattern/){
>         s/$pattern/$own/g;

Where did $com, $img, $pattern and $own come from?  There is no need to
do a match before you do a substitution with the same regular
expression.


> #   print $_;
> }
> if (/img/){
>         s/$img/document.write("<img/g;
> }
> if (/$com/){
>         s/$com/td>");/g;

You have already removed $img and $com above.  What did you think these
substitutions would accomplish?


> }
> print OUT $_;
> }
> close (OUT);
> close (IN);
> rename("$test","$filetoopen");

perldoc -q vars

You should verify that rename() succeeded.

> }}

----------------------------------------

#!/usr/bin/perl
use warnings;
use strict;

print 'Enter a path name: ';
chomp( my $path = <STDIN> );

print 'Enter the type of extension: ';
chomp( my $ext = <STDIN> );

opendir THISDIR, $path or die "serious dainbramage: $!";
my @allfiles = map "$path/$_", grep /\Q$ext$/, readdir THISDIR;

# get all files
foreach my $filetoopen ( @allfiles ) {

    print $filetoopen;
    open IN, "<$filetoopen" or die "cannot open file: $!";
    open OUT, ">$test" or die "cannot open file: $!";

    while ( <IN> ) {
        s/$com/td>\n<\\script>/g;
        s/$img/\n<script>\n<img/g;
        s/$pattern/$own/g;
        s/$img/document.write("<img/g;
        s/$com/td>");/g;
        print OUT $_;
        }
    close OUT;
    close IN;
    rename $test, $filetoopen or warn "Cannot rename $test to
$filetoopen: $!";
    }

__END__



John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to