Shawn Wilson wrote:
> 
> This is pretty much my first perl program, so please escuse me if there
> are loads of errors, but i only get two reported to me which i can't
> figure out, any help would be appreciated.
> 
> #!/usr/bin/perl

You should enable warnings and strict while developing your program.

use warnings;
use strict;


> use File::Find;
> use File::Remove        qw(remove);

Is there a reason you don't use perl's built-in unlink() function to
remove files?

> use Image::Info;
> use File::Scan;
> 
> sub wanted;
> 
> $file   =       $File::Find::name;
> $dir    =       $File::Find::dir;

Setting these variables here will have no effect inside the wanted sub,
you need to do a typeglob copy for it to work.

our ( $file, $dir );
*file = *File::Find::name;
*dir  = *File::Find::dir;


> print "Where are the pictures/?";
> $indir = <STDIN>;

You need to remove the newline from the end of the input for this to
work.

chomp( my $indir = <STDIN> );


> File::Find::find({\&wanted, '$indir');
                   ^          ^      ^
You have an opening brace there without a closing brace.  The single
quotes mean that the string will not be interpolated.

File::Find::find( \&wanted, $indir );


> exit;
> 
> sub wanted {
>     unless ($file =~ '/^.*\.jpg\z/s') {
                       ^ ^^^        ^^
The underlined parts are not doing anything useful here.

      unless ( $file =~ /\.jpg\z/ ) {


>         remove $file;
>         }
>     else ({$file_ext, $width, $heigh, $color_type} = Image::Info(\&file)) {
            ^                                      ^              
^^^^^^
You need parens () there instead of braces {}.  What type of argument is
Image::Info() expecting because you haven't defined the 'file' sub
anywhere.


>         if( ($width < 200 && $height < 400) || ($width < 400 && $height < 200) ) {
>             remove $file;
>         }
>         elseif ($file_ext ne {'bmp|jpg|png|tif') {

Your first statement removes any files that don't have a '.jpg'
extension so only files WITH that extension should get to this point. 
You have a left brace { with no matching right brace }.  If you want to
compare multiple values you need a separate expression for each one.

          elseif ( $file_ext ne 'bmp' and
                   $file_ext ne 'jpg' and
                   $file_ext ne 'png' and
                   $file_ext ne 'tif' ) {

>             remove $file;
>             }
>         elseif ($color_type = ('Gray'|'GrayA') {

You have a left paren ( with no matching right paren ).  You are doing
an assignment here which is ALWAYS true.


>             remove $file;
>             |
>         elseif {$scanres->scan($file) ) {
>             if( $scanres->suspicious) (
>                 print "$file looks like it has a virus, delete/? /(Y//N/)"
>                 if <STDIN>=~ 'y|Y' remove $file;

The correct syntax for an if modifier statement is:

                  remove $file if <STDIN> =~ /y|Y/;


>             )
>         )
>     }
> }
> 
> the errors are as follows:
> 
> syntax error at ./bigimg2.pl line 17, near "'$indir')"
> syntax error at ./bigimg2.pl line 24, near "else ("
> Execution of ./bigimg2.pl aborted due to compilation errors.


John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to