"Chas. Owens" <[EMAIL PROTECTED]> writes:
>> I don't understand why that happens.
>>
[snip] my version of script
> It looks like your problem is that you are creating a named subroutine
> inside another.
>
> I think this is close to what you desire.
Yes, and I see you were able to come very close to what I was after
even with my terribly jumbled script.
It looks like what you've done is pass an entire sub function into
another sub function. So there ends up being 3 sub function in all.
I see it works but I'm still a little confused about `wanted()'.
Is it not considered a sub function? I'm not clear on `named' as
against simple `sub {...}'
The only biggish difference between your effort and what I wanted is
that I wanted to print both the filename and the line containing the
hit on $rgx. But it would have been hard to divine that out of what I
posted since I miss used File::Find;dir repeatedly when I meant
File::Find::name.
I made a (very) few changes to the main body and added a test to make
sure a command line flag was actually passed in from cli and will be
able to incorporate this into the main program... thanks.
I've included the new version and a diff file below just in case you
wanted to see what I'd done with the test.
------- 8< snip --------
#!/usr/local/bin/perl
use strict;
use warnings;
use File::Find;
use File::MMagic;
my $flag;
if([EMAIL PROTECTED] || $ARGV[0] eq "help"){
usage();
exit;
}else{
$flag = shift;
}
checkfile($flag);
sub checkfile {
my $use = shift;
my $rgx = qr/(?:^|:)$use /;
my @finddir = qw(/usr/portage/profiles);
my $mm = File::MMagic->new;
find(
sub {
my $file = $File::Find::name;
my $res = $mm->checktype_filename($file);
if ($res =~ m{^text/plain}) {
open my $fh,"<", $file
or die "Could not open $file: $!";
while (<$fh>) {
if (/$rgx/) {
print "$File::Find::name\n";
print "$_\n\n";
#last; #don't read the rest <=
whoops, wrong...
# We actually want to read all of it
# in case another instance of `(?:^|:)$use '
# shows up
}
}
}
},
@finddir
);
}
sub usage {
print "
Purpose: blah
Usage: blah
example: blah
"
}
------- 8< snip --------
9,15c9,10
< my $flag;
< if([EMAIL PROTECTED] || $ARGV[0] eq "help"){
< usage();
< exit;
< }else{
< $flag = shift;
< }
---
> my $flag = shift;
>
33,38c28,29
< print "$File::Find::name\n";
< print "$_\n\n";
< #last; #don't read the rest <=
whoops, wrong...
< # We actually want to read all of it
< # in case another instance of `(?:^|:)$use '
< # shows up
---
> print "$file\n";
> last; #don't read the rest
46,53d36
<
< sub usage {
< print "
< Purpose: blah
< Usage: blah
< example: blah
< "
< }
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/