Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re^2: Adding row in a hash Help!!

by Anonymous Monk
on Aug 20, 2012 at 02:27 UTC ( #988376=note: print w/ replies, xml ) Need Help??


in reply to Re: Adding row in a hash Help!!
in thread Adding row in a hash Help!!

Hi Dave, any ideas why it does not work with more data like in this code?

#!/usr/bin/perl -w use strict; use CGI qw(-oldstyle_urls :standard); use Data::Dumper; use Date::Format; use Date::Parse; my $q = new CGI; use vars qw($vars); $| = 1; my @data; my $today = get_timezone(); #set $Data::Dumper::Purity to 1 if you have nested references $Data::Dumper::Purity = 1; #open (FILE, ">data.txt") or die "can't open file: $!"; my $weather_data = do "data.txt"; for my $w_data (@$weather_data) { push @data, $w_data; } # Now add 'report_date' key and its value at the appropriate level. push @data, $data->[0]{'xml_api_reply'}{'weather'}{'report_date'} = { +'-data' => $today }; print Dumper(\@data); #print FILE Dumper(\@data); #close FILE or die "can't close file: $!"; sub get_timezone { ### Get our local time. $ENV{'TZ'} = 'America/New_York'; $today = time2str( "%m-%d-%Y \@ %H:%M:%S", time); }

data.txt
$VAR1 = [ { 'xml_api_reply' => { '-version' => '1', 'weather' => { '-row' => '0', 'current_conditions' = +> { + 'icon' => { + '-data' => '/ig/images/weather/mostly_cloudy.gif' + }, + 'temp_f' => { + '-data' => '70' + }, + 'temp_c' => { + '-data' => '21' + }, + 'wind_condition' => { + '-data' => 'Wind: E at 7 mph' + }, + 'humidity' => { + '-data' => 'Humidity: 65%' + }, + 'condition' => { + '-data' => 'Mostly Cloudy' + } + }, } } }, ];

Thanks for trying to help!


Comment on Re^2: Adding row in a hash Help!!
Select or Download Code
Re^3: Adding row in a hash Help!!
by hbm (Hermit) on Aug 20, 2012 at 02:46 UTC

    And what does, "does not work" mean this time?

    I got a pretty clear error message when running your script:

    Global symbol "$data" requires explicit package name ...

    Which led me to this line:

    push @data, $data->[0]{'xml_api_reply'}{'weather'}{'report_date'} = {' +-data' => $today };

    Which I changed to this:

    push @data, $weather_data->[0]{'xml_api_reply'}{'weather'}{'report_dat +e'} = {'-data' => $today };

    Now it runs without errors.

      It runs, but look at the extra line added to end end of the file:
      ... $VAR1->[1] = $VAR1->[0]{'xml_api_reply'}{'weather'}{'report_date'};

        Ah, ok. Try these changes:

        # no need for this loop: # for my $w_data (@$weather_data) { # push @data, $w_data; # } # Now add 'report_date' key and its value at the appropriate level. #push @data, $weather_data->[0]{'xml_api_reply'}{'weather'}{'report_da +te'} = { '-data' => $today #}; push @{$weather_data->[0]{'xml_api_reply'}{'weather'}{'report_date'}}, + { '-data' => $today }; # print Dumper(\@data); print Dumper(\$weather_data);
      Here is the answer:
      $data[0]{'xml_api_reply'}{'weather'}{'report_date'} = {'-data' => $tod +ay };

      No need to use push!
Re^3: Adding row in a hash Help!!
by davido (Archbishop) on Aug 20, 2012 at 03:02 UTC

    ...any ideas why it does not work with more data like in this code?

    Because you pasted code without taking the time to understand what it's doing.

    There are resources available: perlintro, perlref, perlreftut, and perldsc.


    Dave

        Crude language is not appreciated or appropriate here.

        There are more sophisticated ways of expressing dissatisfaction.

        You shouldn't be here to show off you f. ego. If you can answer intelligently, shut you hole you freak!! If someone is asking a question is for a f. reason

        You shouldn't be here.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://988376]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (8)
As of 2014-09-22 08:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (185 votes), past polls