Hello List, 

I am hoping for some help with this. I did post this same question to PerlMonks.

Undefined format "STDOUT" called at find_hog.tdy line 173.
Line 173 is the 1st write statement, but since there are snips in there 173 is 
not the actual line in this email.
Just look for 1st write statement.

thank you.  :)


#!/usr/bin/perl


use strict ;
use warnings ;
use File::Find ;
use File::Find::Closures qw(find_by_min_size) ;
$ENV{"PATH"} = qq(/usr/bin:/bin) ;
delete @ENV{qw (IFS CDPATH KSH_ENV)} ;


my ( $key, $keys, $user, $grp, $gcos, $mod, $mod2, $sz, ) ;
my ( @sorted_large_files, @sorted_root_files, );

<snip>

sub dateme {

    ##-- $mod is for modification time from file(s) --##
    my $mod = shift @_ ;
    my ($seconds, $minutes, $hours, $day_of_month, $month,
        $year,    undef,    undef,  undef
    ) = localtime( $mod ) ;

    ##-- $mod2 is like $mod, but does more, allows user to see mod time from 
sprintf --##
    my $mod2 = sprintf(
        "%02d:%02d:%02d-%02d/%02d/%02d",
        (   $hours, $minutes, $seconds, $month + 1,
            $day_of_month, ( $year % 100 )
        )
    ) ;
}

<snip>


##-- Begin Main --##
#===================#

print qq(\n) ;
my $fs   = $ARGV[0] ;
my $size = ( $ARGV[1] * 1024 * 1024 ) ;
$fs   =~ tr /\000//d ;    ##-- Clean user input --##
$size =~ tr /\000//d ;

die qq ( \nPlease enter filesystem followed by minimum file size to search.
Usage example: find_hog /var 25 will look in /var for files >= 25Mb\n\n ),
    unless ( $fs and $size ) ;

my ( @root_files, @large_files, ) ;

if ( $fs eq "/" ) {    ## only if the root directory
    <snip>
}
elsif ( $fs =~ m|^/\w+|i ) {    ## matches /var
    find_me( $fs, $size, 0 ) ;
}
elsif ( $fs =~ m|^[/.\w+]|i ) {    ## matches /.ssh
    find_me( $fs, $size, 0 ) ;
}

sub find_me {
    my $fs   = shift @_ ;
    my $size = shift @_ ;
    my ( $wanted, $list ) = find_by_min_size( $size ) ;
    File::Find::find( { wanted => $wanted, no_chdir => +shift }, $fs ) ;
    @large_files = $list->() ;

}   ##-- End sub --##

##-- Gather meta-data --##
#=========================#

use constant DIVISOR        => ( 1024 ) ;
use constant LINES_PER_PAGE => ( 44 ) ;

if ( @large_files ) {
    my %meta ;
    for my $file ( @large_files ) {
        $meta{$file} = {
            'uid' => ( stat( $file ) )[4],
            'gid' => ( stat( $file ) )[5],
            'sz'  => ( stat( $file ) )[7],
            'mod' => ( stat( $file ) )[9],
        } ;

    }   ##-- End For --##

    for $key ( keys %meta ) {
        $user            = qq(N/A)
            unless $user = (getpwuid ( $meta{$key}->{'uid'} ) )[0]  ; ##-- uid 
name --##

        $grp             = qq(N/A)
            unless $grp  = (getgrgid ( $meta{$key}->{'gid'} ) )[0]  ; ##-- gid 
name --##

        $gcos            = qq(N/A)
            unless $gcos = (getpwuid ( $meta{$key}->{'uid'} ) )[6] ; ##-- gcos 
--##

        $mod             = qq(N/A)
            unless $mod = $meta{$key}{'mod'} ;

        $sz              = qq(N/A)
            unless $sz   = $meta{$key}{'sz'} / DIVISOR / DIVISOR ;

        my $ofh = select( STDOUT ) ;
        $= = LINES_PER_PAGE ;
        select( $ofh ) ;
        write ;  ## THIS IS WHERE THE ERROR IS ##
        $ofh = select( LOG ) ;
        $=   = LINES_PER_PAGE ;
        select( $ofh ) ;
        write( $ofh ) ;

    }   ##-- End For --##

        ##-- Sort values according to sz --##

        @sorted_large_files =
            sort { $meta{$b}->{'sz'} <=> $meta{$a}->{'sz'} } keys %meta;

}   ##-- End @large_files if --##

<snip>
        ##-- Begin Format Code --##
        #==========================#

        $^L = q{};
        format STDOUT_TOP =
        REPORT OF LARGE FILES on:
        @<<<<<<<<<<
        qx(hostname)


        Page @<<<
        $%

        FileName                                                              
Owner    GroupOwner   Gecos                     LastModifiedDate   Size Mb
        =========================                                             
=======  ===========  ======                    =================  =======
        .

        format STDOUT =
        @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
@<<<<<<< @<<<<<<    @<<<<<<<<<<<<<<<<<<<<<<<  @|||||||||||||  @##.##
        @sorted_large_files,                                                    
                                               dateme($mod,$mod2)

       .
       <snip>
       ##-- End Format Code --##
       #========================#


else {
    warn "\nNo file(s) over $size Mb found in $fs\n" ;
    exit 0 ;
}

#print "\n";
#print join("\n",@sorted_large_files);
#print join("\n",@sorted_root_files);

END {
    close( LOG ) or warn "Log '$log' failed to close $!" ;
}





      
____________________________________________________________________________________
Be a better friend, newshound, and 
know-it-all with Yahoo! Mobile.  Try it now.  
http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ 


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


Reply via email to