Phoenix.pm: I can't figure it out
Lane, Bryan
bryan.lane at rez.com
Fri May 7 14:25:16 CDT 1999
I'm going to look at this, and see what I can figure out.
You may be waiting a while though, as I'm one of the least
experienced with Perl who is in the group.
Later,
Bryan
> -----Original Message-----
> From: Doug and Julie Miles [mailto:dmiles at primenet.com]
> Sent: Friday, May 07, 1999 10:55 AM
> To: phoenix-pm-list at happyfunball.pm.org
> Subject: Phoenix.pm: I can't figure it out
>
>
> I am trying to get a friend interested in perl, and have been
> trying to
> give him a small script that is close to something he wants
> to do. The
> idea is that he can modify it to do exactly what he wants, and thereby
> learn some perl. The problem is that I can't get it to work.
> He is a C
> programmer, so I took a script from the cookbook, and I've
> been 'C'ifing
> it. The problem is that the original version works, but mine
> doesn't. I
> was wondering if any of you can tell me why. Its probably something
> stupid, but right now I don't see what it is. Both scripts
> are supposed to
> recurse directories provided on the command line, and find the largest
> file. I'm doing this in Winbloze 95. perl -v says:
>
> This is perl, version 5.005_02 built for MSWin32-x86-object
>
> Copyright 1987-1998, Larry Wall
>
> Binary build 507 provided by ActiveState Tool Corp.
> http://www.ActiveState.com
> Built 15:08:32 Nov 14 1998
>
> Here is the original script:
>
> use File::Find;
> @ARGV = ('.') unless @ARGV;
> my ($saved_size, $saved_name) = (-1, '');
> sub biggest {
> return unless -f && -s _ > $saved_size;
> $saved_size = -s _;
> $saved_name = $File::Find::name;
> }
> find(\&biggest, @ARGV);
> print "Biggest file $saved_name in @ARGV is $saved_size bytes
> long.\n";
>
> here is my version:
>
> use File::Find;
>
> # If no command-line arguments are provided, set to the
> current directory.
> if(!@ARGV)
> {
>
> @ARGV = ('.');
>
> }
>
> my $file_name = '';
> my $file_size = -1;
>
> find(\&biggest, @ARGV);
>
> print "Biggest file $file_name is $file_size bytes.\n";
>
> # biggest
> ######################################################################
>
> sub biggest
> {
>
> # This is just for debugging info.
> if(-f _)
> {
>
> print "$_ $File::Find::name: " . (stat(_))[7] . "\n";
>
> }
>
> if((-f _) && ((stat(_))[7] > $file_size))
> {
>
> # Get the largest file's filename and size.
> $file_size = (stat(_))[7];
> ($file_name = $File::Find::name) =~ s!/!\\!g;
> print "Biggest file $file_name is $file_size bytes.\n";
>
> }
>
> } # END: biggest
>
> The problem with my script is that it is returning the
> correct largest file
> size, but the wrong file name (it is another file in the same
> directory as
> the true largest file). Just FYI, I was using '-s _' but was having
> problems with it, so I replaced it with '(stat(_))[7]'. Any clues are
> greatly appreciated. Thanks.
>
> Doug and Julie Miles
>
More information about the Phoenix-pm
mailing list