array is not the best data structure for this kind of search operation, but if you insist on using an array, try:
my $userinput = "abcd"; my @allfilesystems = (["xxx",1234,5678],["abcd",9999,1111]); my @buffer = (); foreach my $i (0 .. $#allfilesystems){ my $flag = 0; foreach my $j ( 0 .. $#{$allfilesystems[$i]}){ push(@buffer,$allfilesystems[$i][$j]); $flag = 1 if($allfilesystems[$i][$j] =~ /$userinput/io); } print join("\n",@buffer) if($flag); @buffer = (); } the above prints: abcd 9999 1111 which should be what you want right? :-) as i said before, this is not the best appoach. if you always want to search for a certain field(in your case, i think you are searching the Plex_Name field), you should index that field such as using a hash instead of an array. david Yanet I wrote: > Actually, the problem with the previous one (very stupid, by the way) was > that I wasn't providing the user input. Anyway, the output right now is > the following: > > #./getinfo.pl data02 > Filesystem Information: > data02-01 > > > How can I print the whole row? So my output will look as I described on my > previous email: > #./getinfo.pl data02 > Filesystem Information: > Disk_Type: sd > Disk_Name: oradg_C9-09 > Plex_Name: roll02-01 > Disk_VolName: oradg_C9 > Device_Number: HDS99600_19 > > > > -----Original Message----- > From: Leon, Yanet I,,DMDCWEST > Sent: Tuesday, August 27, 2002 10:42 AM > To: [EMAIL PROTECTED] > Subject: LISTS OF LISTS - Help please!! > > I have an array which contains the entries below - the > output was generated with the following loop: > for $r ( 0 .. $#allfilesystems ) { > for $c ( 0 .. $#{ > $allfilesystems[$r] } ) { > print "elt $r $c is > $allfilesystems[$r][$c]\n"; > } > print"\n"; > } > OUTPUT: > elt 0 0 is sd > elt 0 1 is appsdg_CA-01 > elt 0 2 is dmdcapps_archive-01 > elt 0 3 is appsdg_CA > elt 0 4 is HDS99600_18 > > elt 1 0 is sd > elt 1 1 is appsdg_CB-01 > elt 1 2 is dmdcapps_archive-01 > elt 1 3 is appsdg_CB > elt 1 4 is HDS99600_17 > > elt 29 0 is sd > elt 29 1 is oradg_C9-09 > elt 29 2 is roll02-01 > elt 29 3 is oradg_C9 > elt 29 4 is HDS99600_19 > > elt 30 0 is sd > elt 30 1 is oradg_C9-10 > elt 30 2 is arch01-01 > elt 30 3 is oradg_C9 > elt 30 4 is HDS99600_19 > > > > What I need to do is to compare the user input with each of > the entries in my array. For instance, if the user enters roll02 - the > whole row containing roll02 must be printed. > > yanet@myhost#getinfo.pl roll02 > Filesystem Information: > Disk_Type: sd > Disk_Name: oradg_C9-09 > Plex_Name: roll02-01 > Disk_VolName: oradg_C9 > Device_Number: HDS99600_19 > > The above is the ideal output. However, I have had trouble > comparing my user output with each of the elements of my array. The > following was attempted but, it doesn't work: > for $r ( 0 .. $#allfilesystems ) { > for $c ( 0 .. $#{ $allfilesystems[$r] } ) { > print "$allfilesystems[$r][$c]\n" if > $allfilesystems[$r][$c] =~ /$userinput/i; > } > print"\n"; > } > > OUTPUT: > Use of uninitialized value at ./vxprint2.pl line 29. > sd > Use of uninitialized value at ./vxprint2.pl line 29. > oradg_C9-10 > Use of uninitialized value at ./vxprint2.pl line 29. > arch01-01 > Use of uninitialized value at ./vxprint2.pl line 29. > oradg_C9 > Use of uninitialized value at ./vxprint2.pl line 29. > HDS99600_19 > > I know that the above is supposed to print only the entry, > WHICH CONTAINS THE USER INPUT but I want all the entries in the > corresponding row. How may accomplish this?? My attempt is not even > doing > the minimum. Any suggestions??? > > Thank you!!! > > Yanet -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]