#! /usr/opt/perl5/bin/perl -w eval 'exec /usr/opt/perl5/bin/perl -S $0 ${1+"$@"}' if 0; #$running_under_some_shell use strict; use File::Find (); # Set the variable $File::Find::dont_use_nlink if you're using AFS, # since AFS cheats. # for the convenience of &wanted calls, including -eval statements: use vars qw/*name *dir *prune/; *name = *File::Find::name; *dir = *File::Find::dir; *prune = *File::Find::prune; sub wanted; sub doexec ($@); # Traverse desired filesystems File::Find::find({wanted => \&wanted}, '/home/mcafee/updates'); exit; <<----Ends the script sub wanted { /^avvdat-.?.?.?.?\.zip\z/s && doexec(0, 'ls','-al','{}'); } #These two lines are outside of the subroutines, and fall after the exit, so they will never be executed! use Cwd (); #<<-----Move this up to the use File::Find at the beginning of the code. my $cwd = Cwd::cwd(); #<<-----Put this right under it. sub doexec ($@) { my $ok = shift; my @command = @_; # copy so we don't try to s/// aliases to constants for my $word (@command) { $word =~ s#{}#$name#g } if ($ok) { my $old = select(STDOUT); $| = 1; print "@command"; select($old); return 0 unless =~ /^y/; } chdir $cwd; #sigh system @command; chdir $File::Find::dir; return !$?; }