I have the below code that is reading in a csv file and writing an xml
file.  The code as is will work fine if I remove the use strict line.  (
I would prefer not to do this.)  However as it is now with the use
strict it gives me a runtime error of: "Can't use string ("") as a HASH
ref while "strict refs" in use at C:\Code\EventXML\TestEventXML.pl line
15, <EVENTCSV> line 1."  Line 15 is where it tries to assign a value to
an array of hashes. ($events[$cnt]{title} = $event_line[0];)  This
method of assignment matches what is found at
http://perldoc.perl.org/perldsc.html#Declaration-of-an-ARRAY-OF-HASHES
under the secont of add a key/value to an element.  Any enlightenment
would be appreciated, thanks.

 

use strict;

use warnings;

 

my $filepath = 'C:\Code\EventXML\events.csv';

my $xmlpath = 'C:\Code\EventXML\events.xml';

my @event_line = "";

my @events = "";

my $line = "";

my $cnt = 0;

 

open(EVENTCSV,$filepath);

while($line = <EVENTCSV>)

{

                @event_line = split(/,/,$line);

$events[$cnt]{title} = $event_line[0];

$events[$cnt]{start} = $event_line[1];

$events[$cnt]{end} = $event_line[2];

$events[$cnt]{display} = $event_line[3];

$events[$cnt]{link} = $event_line[4];

$cnt++;

}

close(EVENTCSV);

$cnt = 0;

open(EVENTXML, ">$xmlpath");

print EVENTXML "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";

print EVENTXML "<?xml-stylesheet type=\"text/css\"
href=\"xmlstyles.css\" ?>\n";

print EVENTXML "<doc>\n";

foreach(@events)

{

    print EVENTXML "<event>\n";

    print EVENTXML "\n";

    printf EVENTXML "    <title>%s</title>\n",$events[$cnt]{title};

    printf EVENTXML "
<date-start>%s</date-start>\n",$events[$cnt]{start};

    printf EVENTXML "    <date-end>%s</date-end>\n",$events[$cnt]{end};

    printf EVENTXML "
<date-display>%s</date-display>\n",$events[$cnt]{display};

    printf EVENTXML "    <link>%s</link>\n",$events[$cnt]{link};

    print EVENTXML "</event>\n";

    print EVENTXML "\n";

    $cnt++;

}

print EVENTXML "<doc>\n";

close(EVENTXML);

 

thanks,

 

Travis Hervey

Reply via email to