That is a a great description of what is going on, but I think his question centered on the &SYNTAX*, not the *SEMANTICS*. As a programmer from the "algebraic" school (FORTRAN, algol, pascal, C, Ada, etc.), he is unacustomed to seeing a function call without surrounding parens. The key concept here, and one that is rather "perly", is "list context" and "scalar context".
James Edward Gray II writes: > On Dec 8, 2003, at 10:52 AM, [EMAIL PROTECTED] wrote: > > > I've just started trying to pick up a little perl. > > I'm breezing through "Learning Perl" and reading the perl docs. > > > > Here is some syntax I found a little funny, and I was hoping somebody > > could explain this too me: > > > > opendir(DIR, $some_dir) || die "can't opendir $some_dir: $!"; > > @dots = grep { /^\./ && -f "$some_dir/$_" } readdir(DIR); > > closedir DIR; > > > > The first and 3rd lines I have no problem with. > > > > Its that line with the grep in it. > > Okay, let's go step by step readdir() is called (in list context), so > it returns all entries in the directory. Simple enough. > > That returned list is immediately fed to another built-in, grep(). > grep() goes through every element in the list, checking it against some > expression you provide (the part in the braces). Inside the > expression, the element you're currently checking is in Perl's default > variable $_. If the expression returns true for that element, it is > included in grep()'s return list. If not, it is omitted. > > In this case, the expression check two things. First, it uses a > pattern match on the name to see if it begins with a dot (.). If it > does, it checks to make sure the entry is a file, to rule out entries > like '.' and '..'. If the entry passes both tests, grep() returns it. > Otherwise, it's let out of the return list. It may help to think of > grep() as a filtering engine you can use to build on-the-fly lists. > > Finally, the list returned by grep() is assigned to @dots, which is > pretty much what it will contain, any file beginning with a dot (hidden > files on a Unix system). > > Here's a rough English translation of the line: > > place in @dots all things beginning with . that are actually files from > the listing for DIR > > Hope that helps. > > James > > > -- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > <http://learn.perl.org/> <http://learn.perl.org/first-response> > > > -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>