William Martell <[EMAIL PROTECTED]> wrote:
: 
: Hi Charles.  Thank you very much for the code and the lesson.
: Works perfectly!

    It wasn't meant to be a finished product. Just an example to
learn from. You need to, at least, add some error checking, but
I am glad it works. :)


: I am trying to add the address portion to this but I am still
: having some trouble. I wanted to see if I could ask you
: questions regarding your code for even more insight.  Thanks
: in advance for your time and consideration.

    No problem.
    Please keep asking!


[ I edited the questions so they appeared under the code. ]

: # column names
: print csv( {
:     date            => 'Date',
:     price           => 'Price',
:     bedrooms        => 'Bedrooms',
:     bathrooms       => 'Bathrooms',
:     living_areas    => 'Living_areas',
:     phone           => 'Phone',
:     address         => 'Address',
:     location        => 'Location',
:     arrangement     => 'Arrangemant',
:     paper           => 'Paper',         } ), "\n";
:
: (OK, right here, it looks like you just made things easier
: by not naming a hash and declaring the fields then printing
: via csv sub procedure, and instead just declared an
: anonymous hash, is this correct? )


    Yes. An unnamed hash is called an anonymous hash.
 
    I don't know if it is easier, but when I first started
Randal (I think?) said something about unnecessarily using
extra variables. Since, all this does is print out the 
column names, it doesn't make sense to define a file scoped
variable for this one use.



: 
:         # Set field defaults
:         %ad = (
:             date            => '',
:             price           => '',
:             bedrooms        => '',
:             bathrooms       => '',
:             living_areas    => '',
:             phone           => '',
:             address         => '',
:             arrangement     => '',
:             location        => '',
:             paper           => '',
:         );
: 
: (Here I am still a little foggy, but I think you are saying 
: that in the hash %ad there are these keys and the default
: values in them are blank, if they get replaced with real
: values later in the program great, and if not, they will 
: still print as blank.  Is this correct?)

    Yes. Though I would call "''", blank. Maybe an empty
or zero-length string, but blank sounds like it could have
spaces in it.
 




 
: while ( <DATA> ) {
: 
:     if ( /^Price/ ) {
: 
:         # add the last ad if it exists
:         print csv( \%ad ), "\n" if is_valid_ad( \%ad );
                        .
                        .
                        .

:         # update %ad for this line
:
:         @ad{ qw| price bedrooms bathrooms living_areas | }
:
: (I am having trouble with this,  I think you are using the
: array symbol because we are dealing with a list, but that
: the values held in $_ and returned by price_fields sub
: procedure will actually apply to the hash %ad,
: Is this correct??

    Yes. It is called a slice. Read the section on slices in
'perldata'.

:                 = price_fields( $_ );
:     }

:     Another question is how does Perl know what $_ is
: referring to, I guess the line that begins with Price but
: I am not sure, please explain.)


while ( <DATA> ) {

    is a short-cut for:

while ( defined( $_ = <DATA> ) ) {

    Many programmers, especially on the list, emphasize that
we should use:

while ( defined( my $line = <DATA> ) ) {

    And then operate on $line. In my haste, I got lazy. :)

    Regardless, $_ (or $line) is set to the value of the
current line each time the loop begins.


HTH,

Charles K. Clarkson
-- 
Mobile Homes Specialist
254 968-8328


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to