Schrift
[thread]8178[/thread]

Modul / referenz Problem

Leser: 1


<< >> 3 Einträge, 1 Seite
stef23
 2006-07-18 21:58
#68227 #68227
User since
2006-03-09
14 Artikel
BenutzerIn
[default_avatar]
hi hoffentlich kann mir einer weiterhelfen...

ich hatte mir ein kleines modul geschrieben um damit später auf eine Datenbank zuzugreifen und diese werte dann als Balkendiagramm auszugeben.

hier das modul

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package BD2;
require Exporter;

use GD::Graph::bars;


our @ISA = qw("Exporter");
our @Exporter=qw($BalkenD uegabe);
our @Exporter_OK=qw();
our $Version=1.00;


###### Art des Graphes #####
my $graph = new GD::Graph::bars(400, 400);

###### Attribute des Graphen #####
$graph->set(
x_label => 'Gel-Nr.',
y_label => 'Intensität',
title => 'Dot-Analyse',
y_max_value => 16,
y_tick_number => 8,
y_label_skip => 2,
bar_spacing => 1
);


###### Werte ######
sub uegabe {
push (@Speicher, @_);
for (0..5){
$data[0][$_]=$Speicher[$_];
$data[1][$_]=$Speicher[$_+6];
$data[2][$_]=$Speicher[$_+12];
}
}

#my @data = (
#["1st","2nd","3rd","4th","5th","6th","7th", "8th", "9th"],
#[ 1, 2, 5, 6, 3, 1.5, 1, 3, 4],
#[ 10, 12, 5, 9, 1, 2, 1, 7, 8]
#);
my $zeiger=\@data;
###### Ausgabe #######

$BalkenD=$graph->plot($zeiger)->png();


1;


hier der programm teil...
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!c:/Perl/bin/perl.exe
use BD2;
use DBI;


@Werte = (
["1st","2nd","3rd","4th","5th","6th","7th", "8th", "9th"],
[ 1, 2, 5, 6, 3, 1.5, 1, 3, 4],
[ 10, 12, 5, 9, 1, 2, 1, 7, 8]
);


BD2::uegabe(@Werte);


print "Content-type: image/png\n\n";
binmode STDOUT;
print $BD2::BalkenD;


wenn ich "#my data " das escapen entferne dann bekomme ich ein mein diagramm. wenn ich die werte aber über meine subroutine übergeben will kommt es zu dieser Fehlermeldung:

C:\Programme\xampp\cgi-bin>balken2.pl
Can't call method "png" on an undefined value at C:/Perl/site/lib/BD2.pm line 48.
Compilation failed in require at C:\Programme\xampp\cgi-bin\balken2.pl line 2.
BEGIN failed--compilation aborted at C:\Programme\xampp\cgi-bin\balken2.pl line
2.

wie kann er aber an methoden meckern wobei alles geht sofern er die daten aus dem modul selber erhält.

thx schonmal
betterworld
 2006-07-18 22:34
#68228 #68228
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Keine Ahnung, warum der Fehler auftritt, aber mir fällt auf, dass Du qw("Exporter") geschrieben hast, was eigentlich qw(Exporter) heißen müsste. Und Du solltest strict und warnings benutzen.

Statt @Exporter, @Exporter_OK und $Version heißt es @EXPORT, @EXPORT_OK und $VERSION.\n\n

<!--EDIT|betterworld|1153248607-->
topeg
 2006-07-18 23:08
#68229 #68229
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Die Frage bei dem Modul ist, was wann ausgeführt wird und wehr es sehen kann.
"@data" ist außerhalb von "uegabe" nicht initialisiert.

Code: (dl )
1
2
3
    $data[0][$_]=$Speicher[$_];
$data[1][$_]=$Speicher[$_+6];
$data[2][$_]=$Speicher[$_+12];

Hier stimmt auch irgendwas nicht.

Code: (dl )
$BalkenD=$graph->plot($zeiger)->png();

Das wird nur einmal ausgeführt

Code: (dl )
1
2
3
our @Exporter=qw($BalkenD uegabe);
our @Exporter_OK=qw();
our $Version=1.00;

Das müßte meiner Meinung nach auch anders heißen.

Allso ich würde das Modul wiefolgt ändern:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package BD2;

use warnings;
use strict;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
use GD::Graph::bars;
require Exporter;

@ISA = qw(Exporter);
@EXPORT=qw(generate);
@EXPORT_OK = qw();
$VERSION = '1.00';

sub new
{
#"ObjektName" übernehemen
my $proto = shift;
my $class = $proto;

# Übergebene Argumente
# hier nicht in Gebrauch
my %args = @_;

# Speicher für Variablen
my $self = {};

# Objekt anmelden
bless ($self, $class);

###### Art des Graphen #####
$self->{graph} = new GD::Graph::bars(400, 400);

###### Attribute des Graphen #####
$self->{graph}->set(
x_label => 'Gel-Nr.',
y_label => 'Intensität',
title => 'Dot-Analyse',
y_max_value => 16,
y_tick_number => 8,
y_label_skip => 2,
bar_spacing => 1
);

###### Datensatz ####
$self->{data}=[];

# Objekt zurückliefern
return $self;
}

###### Werte ######
sub generate
{
# $self ist der Variablenspeicher
my ($self,@werte)=@_;
for my $i (0..5)
{
$$self->{data}[0][$i]=$werte[0][$i];
$$self->{data}[1][$i]=$werte[1][$i+6];
$$self->{data}[2][$i]=$werte[2][$i+12];
}
return $self->{graph}->plot($self->{data})->png();
}

1;


Der Aufruf wäre dann wie folgt:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!c:/Perl/bin/perl.exe
use BD2;
use DBI;

my $myBD2=DB2::new();

@Werte = (
["1st","2nd","3rd","4th","5th","6th","7th", "8th", "9th"],
[ 1, 2, 5, 6, 3, 1.5, 1, 3, 4],
[ 10, 12, 5, 9, 1, 2, 1, 7, 8]
);
my $png=$myBD2->generate(@Werte);

print "Content-type: image/png\r\n\r\n";
binmode STDOUT;
print $png;


Das ganze ist aber ungetestet und nur aus der holen Hand. Da sind sicher noch Tippfehler drin! :-)
<< >> 3 Einträge, 1 Seite



View all threads created 2006-07-18 21:58.