One of my problems with learning Perl is -- I don't know enough Perl. A common but frustrating problem. Let me explain my learning situation.
Here is an example from one of my Perl books (not Camel or Llama, by the way):
@numerics = map {/^\d +
Now, since the book tells me what this construct is doing (it calculates lines starting with numbers, and then builds a list of the lines input), most of operation is clear enough. Map reads a line from input, checks to find out if the line starts with a digit and then does -- what? I see $_ which is the line input but what does the ? mean? Is it part of the regex or does it operate on $_? What is the purpose of
I checked the index and found nothing I thought applied. I doubt that means the answer is not in the book, just that if I saw the answer I didn't recognize it. And if I have come across what I want to know in earlier reading I have either forgotten it or I wasn't paying sufficient attention. Either option has a 50% chance of being true.
Nothing as concise as map is present in any other language I program in. The ease with which it can be used is fascinating. I know I will find out what I want to know eventually. I am sure all of you who read this see my problem (he's an idiot) and understand what I am trying to say. The more you have of a thing the easier it is to get more. It works for Perl as with everything else.
The solution is obvious; keep studying Perl. Most things that frustrate me seem easy when I look back on them knowing the answer. This will probably not be an exception. And as they say, 'a good learning experience'. As I gain knowledge of Perl the pieces will start to come together.
Hello to chaoticset who has signed on as a Fan. Astounding, just astounding. And hello to merlyn and Louis_Wu as well. I am certain that all three know exactly what the example above means. Inspires me to keep trying to catch up with them to know others have learned before me.
And a public thanks to Corion who answered a Perl Monk question I asked in an earlier journal entry.
@numerics = map {/^\d + /?$_:()} ; (Score:1)
The ? and : are working together here.
For teh full details look up the perlvar man page and search for "Conditional Operator" and then Ternary operator "?:"
The expression
is equivalent to:
if (/^\d +
$_
} else {
()
}
Translated to english:
"If $_ starts with a digit give me $_ otherwise give me the empty list ()"
Re:@numerics = map {/^\d + /?$_:()} ; (Score:1)
Thank you. Another thing I am not used to yet is that Perl allows operations to be jammed together. I would have expected /^d + / ? $_ : (); In the languages I am familiar with that spacing makes a difference. It would be an error to write like that!
Actually... (Score:1)
Re:Actually... (Score:1)
Actually he did list the grep you give as another way it would work along with a 'while' example. The reason I listed the map example is I didn't understand how it worked. I was displaying my ignorance, not the author's.
why + (Score:2)
The + is actually irrelevant - it could be removed. /^\d+/ looks at the beginning of the matched text (^) for one digit (\d) or more digits (+). If the plus were changed to \b, it would require exactly one digit and disallow the line if that digit was immediately followed by an alphanumeric. If the + were removed, it would look for one digit at the start of a line (and if a line starts with one or more
Re:why + (Score:1)
Another visual disfunction. Usually I see that written as d+ and not 'd +'. In the languages I usually program you have to be exact. Somehow I equated that with \b. No good reason why.
I am a little puzzled by your comment on <N>. I don't recall using the term here. Was it in another journal entry? Other special characters appear in Preview as they are. But looking at it in Preview I see the angle characters vanish. Now I see. Thanks for the tip.
Re:why + (Score:2)
When it is <SPACE>+, it is still not the same as \b. The \b pattern matches a "word boundary",
Ecode is your friend (Score:2)
The ?: (Score:1)
------------------------------
You are what you think.
Re:The ?: (Score:1)
Thanks. I begin to think I am Perl visually-impaired. Another learning problem.
I don't know enough Perl (Score:2)
Re:I don't know enough Perl (Score:1)
The lyf so short, the craft so long to lerne.
--Geoffrey Chaucer