Thank you Wiggins! I have changed everything that you suggested and I think
I am much closer. However, I have run into an error w/ the Read line.
foreach my $file (@files) {
$image->Read (file=> $file)
Bad filehandle: brian.jpg at C:/Program Files/PerlEdit/scripts/test_3.pl
line 17
as you can see the script is seeing the file name in the image directory. I
re-read chapter 11 Learning Perl on Bad Filehandles but I'm still having
trouble. Any suggestion would be greatly appreciated.
Thanks!
Brian
-----Original Message-----
From: Wiggins d Anconia [mailto:[EMAIL PROTECTED]
Sent: Thursday, September 09, 2004 12:28 PM
To: Brian Volk; Beginners (E-mail)
Subject: Re: perl crashing at $image->Read (file=> \*ARGV);
>
> Hi All,
>
> I my perl script is crashing perl at this line;
>
> $image->Read (file=> \*ARGV);
>
> I know that it is this line because I have commented out everything else
> around it. When I just have the Read statment, perl will crash. Here is
> the script, can someone please suggest what I am doing wrong.
>
> Thanks!
>
----------------------------------------------------------------------------
> ---------------------
> #!/user/local/bin/perl -w
>
> use strict;
> use Image::Magick;
>
> my $images = "C:/images";
> opendir (IMAGES, $images) or die "can not open $images: $!";
>
> # load @ARGV for (<>)
>
> @ARGV = map { "$images/$_" } grep { !/^\./ } readdir IMAGES;
>
my @files = map { "$images/$_" } grep { !/^\./ } readdir IMAGES;
Not sure why you are using @ARGV just for its special qualities (aka the
<> operator) why not name our variables, we are allowed too.
> my $image = Image::Magick->new(magick=>'JPEG');
>
> # Read images, Scale down and Write to new directory
>
> while (<>) {
No need to use a while here, since you already have a complete array,
foreach my $file (@files) {
> $image->Read (file=> \*ARGV)
By naming our variables we now see that we are dealing with a filename,
rather than a typeglob reference.
$image->Read(file => $file)
The example you are using assumes that *ARGV contains an opened
filehandle to the file itself, *but* within the loop you are executing
on each line. See perldoc perlop for more. I would skip using the
special nature of the variables until you understand them. Try using
specifically named variables until the program works, then reduce it if
you must.
> and $image->Scale (width=>'50', height=>'50')
> and $image->Write ("C:/images")
C<Write> expects a filename argument, not a directory, or a handle.
> and close (ARGV);
Not sure why these statements are strung together with C<and> they can
be separate, you haven't really benefited by making them a single
statement. And you wouldn't normally close ARGV.
> }
>
> closedir IMAGES;
>
You can close your dir earlier in the process, since you are done
reading from it.
> Brian Volk
> HP Products
> 317.289.9950 x1245
> <mailto:[EMAIL PROTECTED]> [EMAIL PROTECTED]
>
http://danconia.org
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>