Thanks to Mr. Krahn and Jaime Murilllo!
Yeeeeeee Ha!!!!!!!
(also, a couple more ques. about the code if I may, further below)
I got the output that I want:
[EMAIL PROTECTED]:~$ grepf6tst hash
1 'hash' array of hashes
2 'hash' initialize sort and print hash
3 'hash' ref deref hash array iterate
4 'hash' hash example useage simple
xtst100805 xtst110105 xtst110805 xtst111205
1 'hashes' found in: xtst100805
2 'hash' found in: xtst110105
3 'hash' found in: xtst110805
4 'hash' found in: xtst111205
wherefound 'xtst100805 xtst110105 xtst110805 xtst111205'
enter a digit: 4
xtst111205
(data snipped)
-------------------------
I no longer need that 2nd set of numbered output.
--------------------------
#################
I still feel rather uncertain when to " " and when not to (except for when I
need to extrapolate a scalar var's content I know how/what to do). Any
pointers?
#!/usr/bin/perl -w
use strict;
my @search4 = @ARGV; # keywords
@ARGV = glob 'xtst*';
my @lines;
while ( <> ) {
if ( s/^#:// ) {
push @lines, [ $ARGV, split ];
}
# quit looking when we reach the ninth line
close ARGV if $. == 9;
}
# map {print @$_} @lines; # works
# foreach (@lines) { # works
# print @$_, "\n";
# }
my $found_tally = 0;
my %data;
for my $keyline ( @lines ) {
my $filename = shift @$keyline;
for my $search ( @search4 ) {
for ( @$keyline ) {
if ( /$search/ ) {
push @{ $data{ $filename } }, $_;
# print ++$found_tally . " " . $search,@$keyline, "\n";
##########################
# how did I do? (looks reasonable to me. but, after all, I'm beginner)
print ++$found_tally," '$search' @$keyline\n\n";
}
}
}
}
my @foundin = sort keys %data;
################## most array print without wrap in " " ???
#print @foundin, "\n"; # does not print
print "@foundin\n"; # why are " " needed?
## I just now removed next section and outputs *exactly* like I want
###### would someone explain what is going on in next (2 for) block(s)?
$found_tally = 0;
for my $filename ( @foundin ) {
for ( $data{ $filename } ) {
$_ = join "\0and\0", @$_;
s/\0and\0(?=.*\0and\0)/, /g;
s/\0and\0/ and /;
print ++$found_tally, " '$_' found in: $filename\n\n";
}
}
print "wherefound '@foundin'\n\n";
print "enter a digit: ";
my $d = <STDIN> - 1;
print "$foundin[$d]\n";
open my $fh, $foundin[ $d ] or die "Cannot open '$foundin[$d]' $!";
print while <$fh>;
--
Alan.
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>