in reply to Re^3: GD::GRAPH:linespoints problem
in thread GD::GRAPH:linespoints problem

okay, perhaps you can help me identify the bug using the following file:
Start comments 1 2 3 4 5 6 7 8 quotes End Start comments 8 7 6 5 4 3 2 1 quotes End
and the following code (excuse the poor quality)

use GD::Graph::linespoints; my $data_file = "retestfileIN.txt"; open DATA, "$data_file" or die "can't open $data_file $!"; undef $/; $_ = <DATA>; close DATA; $/ = "\n"; for my $r (0 .. 1) { if (/comments(.*?)quotes/sg) { my $tempvar = $1; $tempvar=~ s/^\s+|\s+$//g; @alltemp = split(/\n/,$tempvar); foreach my $line (@alltemp) { $line =~ /(\d)\s(.*)/g; push(@first, $1); push(@second, $2); push (@data, ([@first, @second])); } } my $g = GD::Graph::linespoints->new(500,300); # graph code $g->set( x_label => 'X Label', y_label => 'Y label', title => 'Some simple graph', y_max_value => 10, y_tick_number => 8, y_label_skip => 2 ) or die $g->error; my $format = $g->export_format; open (IMG, ">squot$r.$format") or die $!; binmode IMG; print IMG $g->plot(\@data)->$format(); # end graph code }
If I include the code for the graph, the IF never makes it to the second set of data (8 7, 6 5, 4 3, 2 1)

there's my problem

Replies are listed 'Best First'.
Re^5: GD::GRAPH:linespoints problem
by quester (Vicar) on Mar 04, 2007 at 06:48 UTC
    I think the reason that the graph is not quite right is that you are appending to @data on each pass through the loop, but you don't reinitialize it, so on the second pass @data has both sets of data in it. I assume that GD is ignoring the extra set.

    I would suggest that you do all of the following as a matter of course:

    (1) use warnings;

    (2) use strict;

    (3) add "my" where needed to declare variables in the correct scope (you won't need to explicitly reinitialize @data if it is made local to the loop), and finally

    (4) run the script "perltidy" from the CPAN module Perl::Tidy on your code to fix the indentation. This isn't just esthetic, it can make flaws in scoping and nesting a lot more obvious. (Update: a better description of using command-line perltidy is at http://perltidy.sourceforge.net/.)