SPUG: Pasing hash references?

Jay Scherrer jay at Scherrer.com
Wed Oct 30 10:03:07 CST 2002


Hey,
 Next you'll ask for a credit card number, right? I took you up on the reading 
 of perltoot. Now I know why your drumming for your own copy. THanks for the 
 proof reading though. I hadn't used zsub because I thought that there was a 
 zsub conflict with the server, I almost used zub. The reason I'm using oop in 
the program is for scaleable functions. As for using 'undef' well maybe the 
Perl foundation can provide you with your own copy of perltoot. Do you have 
any Camel picture's ?
 Thanks,
 Jay
 

On Monday 28 October 2002 11:46 pm, Adam Monsen wrote:
> Jay,
>
> The code you provided does not compile. Here are some free hints.
>
> - subroutines start with the keyword 'sub' (see code I sent you earlier)
> - please 'use strict' in the FORM package
> - indent your code (formatting may have been lost when the email was
>   sent)
> - pick a naming convention. 'get_info()' or 'getInfo()', but not both
> - using the string 'undef' as a hash value might confuse other
>   programmers. Don't do that.
> - comments like 'Create new class' and 'Define new data' are frivolous
>   and simply reduce readability.
> - the comment 'Create new data file based on %client' is _wrong_. Remove
>   it.
> - it's a good idea to use a CPAN module to generate XML rather than
>   write it by hand. Something like XML::Generator or XML::Simple would
>   work.
> - instead of '$client->FORM::get_Info' do '$client->get_Info'
> - consider /not/ doing object orientation, it's only complicating the
>   issue. However, if you really want to use object orientation, you do
>   not need to pass the hash created in get_Info() to save2XMLfile()
>   since the FORM object you create ($client) has this information. If
>   this doesn't make sense, ditch object orientation.
> - s/anchelada/enchilada/g
> - see: perldocs 'perlboot' and 'perlstyle', for now.
>
> I fixed your source code and cleaned it up quite a bit. The output looks
> like this:
>
>   <?xml version="1.0"?>
>   <FORM>
>     <FIRSTNAME>Jane</FIRSTNAME>
>     <LASTNAME>Doe</LASTNAME>
>     <SCHEDULE>2002</SCHEDULE>
>     <CLIENT_ID>1234</CLIENT_ID>
>   </FORM>
>
> I would be happy to provide this source at the measly sum of US$6.95 for
> services and time. The funds will be donated to The Perl Foundation to
> further support of the Perl programming language.
>
> -Adam
>
> On 28-Oct-2002 01:26 -0800, Jay Scherrer wrote:
> > Heres a short sample,
> > Is there a way of passing the establised hash content back to a
> > subroutine? So far with the simplified setting below, I can pass
> > values to a new class hash as in "get_Info()" and print them calling
> > the keys of the new hash. but how do I get the whole anchelada without
> > redefining the whole hash again?  Below is a very brief snapshot of
> > what I'm working with.
> > Thanks,
> > Jay
> >
> > The script:
> > testForm.pl
> > #!/usr/local/bin/perl
> > use strict;
> > use FORM;
> > my ($client, $clienId, $schedule, $firstname, $lastname);
> > ## Create new class ##
> > $client = new FORM;
> > ## Define new data ##
> > $clientId = (1234);
> > $schedule = ("2002");
> > $firstname = ("Jane");
> > $lastname = ("Doe");
> > ## Input new data into $client hash ##
> > $client->FORM::get_Info($clientId, $schedule, $firstname, $lastname);
> > ## print $client data to  xml file ##
> > $client->FORM::save2XMLfile;
> >
> > The package:
> >
> > package FORM;
> > ## Some routines in package form ##
> >
> > my %FORM = (
> > CLIENT_ID => 'undef',
> > SCHEDULE => 'undef',
> > FIRSTNAME => 'undef',
> > LASTNAME => 'undef'
> > );
> >
> > new {
> > ##Create new data file based on %client ##
> > my $that = shift;
> > my $class = ref($that) || $that;
> > my $self = {%FORM};
> > bless $self, $class;
> > return $self;
> > }
> >
> > save2XMLfile {
> > my $form =@_;
> > my $outFile = "clientName.xml";  # prints new class to file#
> > my ($clientTag, $value);
> > open(OUTFILE, ">$outfile") or die "Can't $!\n";
> > print OUTFILE ("<?xml version=\"1.0\"?>\n");
> > print OUTFILE ("<FORM>\n");
> > foreach $clientTag (keys %form) {
> > $value = $form{$clientTag};
> > print OUTFILE ("<$clientTag>$value</$clientTag>\n");
> > }
> > print OUTFILE ("</FORM>\n");
> > close OUTFILE;
> > }
> >
> > get_Info {
> > $form->{CLIENT_ID} = $clientId if defined $clientId;
> > $form->{SCHEDULE} = $schedule if defined $schedule;
> > $form->{FIRSTNAME} = $firstname if defined $firstname;
> > $form->{LASTNAME} = $lastname if defined $lastname;
> > return %form;
> > }


 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     POST TO: spug-list at pm.org       PROBLEMS: owner-spug-list at pm.org
      Subscriptions; Email to majordomo at pm.org:  ACTION  LIST  EMAIL
  Replace ACTION by subscribe or unsubscribe, EMAIL by your Email-address
 For daily traffic, use spug-list for LIST ;  for weekly, spug-list-digest
     Seattle Perl Users Group (SPUG) Home Page: http://seattleperl.org




More information about the spug-list mailing list