Hi
dk27,
I did get your code to run and produce your desired result although there is a coding mistake here:
# assign hash value pairs and insert '=' between them to create phoneb
+ook
my %hash = map { split( /=/, $_, $x + 1 ) } @v;
entry
should be:
# assign hash value pairs and insert '=' between them to create phoneb
+ook entry
my %hash = map { split( /=/, $_, $x + 1 ) } @v;
Please re-run the code as a double check before posting on Monks to find these simple cut-n-paste goofs. It is easy to wind up with a goof like this (I've certainly made similar mistakes), but do the best you can. If your code runs "right off the bat", even if there are problems with it, you will tend to get much better answers. Get rid of all of the compile errors and warnings to the extent that you can. And if you can't do that, post the error messages and get advice about them.
I don't know what kind of performance or other test case criteria are required. I can only go upon what you have posted. See my code at Re: Perl program to look into the phone directory and in case of a match, print the name along with the number.
In terms of performance, your code besides being pretty obtuse, has many loops and loops within loops.
Some hints:
- Input/Output (I/O) is expensive CPU wise. Even just locating the end-of-line character(s) in an input stream takes CPU power to examine every single input character.
- Looping is "expensive". There are loops within your code that you don't recognize as loops.Example: my @N = <STDIN>; That is a loop that builds a dynamically growing data structure for each line of input. Another example: my %hash = map { split( /=/, $_, $x + 1 ) } @v; Map is basically a short hand way of writing a foreach loop.
Some general principles:
- When processing an input file (or stream from STDIN), to the extent possible, try to take a definitive action based upon the information contained in that line. Do something with that information ASAP. In general making a copy of a file's data in memory, only to process that data again line by line to extract information from that data structure is a bad idea. Please note the distinction between "data" and "information". "Information" is what you get when you process the "raw data".
- Don't save stuff in memory when it is not necessary to do so.
I hope these comments and my code helps you learn more about Perl.
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.