Problem mit Einbindung eines Moduls/Methode

Alles, was Perl betrifft, kann hier besprochen werden.

Problem mit Einbindung eines Moduls/Methode

Postby Rthe1 » 06. December 2006 21:24

Hallo!

Ich bin absoluter Perl-Anfänger, habe zu meinem Problem hier nichts im Forum gefunden. Es geht darum dass ich ein Skript, mit dem ich per GD::Graph::lines einen Verlauf darstellen will, nicht zum Laufen bekomme.

Ich habe mir den aktuellen xampp-Server runtergeladen, das Perl-Addon installiert und außerdem noch ActivePearl installiert. Da GD::Graph::lines nicht bei xampp (und Perl-Addon) dabei ist, habe ich es per ppm installiert. Nun habe ich das Skript in das cgi-bin Verzeichnis meines xampp gelegt und dann per shebang zeile den Activepearl Interpreter eingestellt. Außerdem habe ich noch das lib-Verzeichnis von ActivePearl (für GD::Graph::lines) eingefügt. Wenn ich das Skript jetzt aufrufe bekomme ich als Fehler:
Can't locate object method "new" via package "GD::Graph::lines" at C:/Programme/xampp/cgi-bin/temperatur.pl line 88.

Hier noch mein Skript:
Code: Select all
#!c:/perl/bin/perl.exe

use lib qw(C:/perl/site/lib);
print @INC;

########
#
use strict;
use GD::Graph::lines;
use DBI;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
my $cgi = CGI::new();

########
# Variable und Grundwerte definieren
my @daten0; # Sensordaten 0
my @daten1; # Sensordaten 1
my @einteilung; # Einteilung der Y-Achse

my $filename = "digitemp/linuxfocus2.png"; # Bildname zur Zwischenspeicherung

# Ueberschrift der Grafik
my $g_ueberschrift = "Temperatur Verlaufs Uebersicht / Tag aktuell /  Zeit aktuell / aufgeteilt nach Monate";

# Beschriftung Y-Achse der Grafik
my $x_beschriftung = "Monate";


########
# HTML Ausgabe erstellen
print $cgi->header();
print $cgi->start_html;
print $cgi->startform();
#print $cgi->p(        {-align => 'center'},
#                                        $cgi->submit(        -name =>'submit',
#                                                   -label =>'Grafik anzeigen'        ));

print $cgi->endform();

########
# Datenbankabfrage und Grafik nur anzeigen wenn submit gedrückt wurde
#if ($cgi->param('submit')) {

  # Datenbankabfrage
  @einteilung = db_abfrage("select zeit from messwerte");

  # Abfrage für Sensor0
  @daten0 = db_abfrage("
  select sensor1 from messwerte
  ");

  # Abfrage für Sensor1
  @daten1 = db_abfrage("
  select sensor2 from messwerte
  ");

  grafik_erstellen(\$filename, \@einteilung, \@daten0, \@daten1);

  # ---------------------------------------------------------------------
  # HTML Ausgabe abschluss
 
  print "<img src=\"../../$filename\" alt=\"$filename\" border=\"0\">";
#} # END - Grafik anzeigen wenn submit gedrückt wurde

########
# Rest HTML Ausgabe
print $cgi->hr;
print '<p align="center"> <a href="../../digitemp/index.html">zurück</a> </p>';
print $cgi->end_html;



################################################
#       SUB SUB SUB SUB SUB SUB

sub grafik_erstellen {
  # ----------------------------------------------------------------------------
  # Daten der Grafik
  my @graph_data = (
    \@einteilung,
    \@daten0, # Achswert 1
    \@daten1, # Achswert 2
  );


  # Grafik erstellen und Grösse der Grafik festlegen X,Y
  my $graph = GD::Graph::lines->new(1000, 350);

  # Legende der beiden Achswerte
  $graph->set_legend( "Temperatur Rechner Innen", "Temperatur Aussen");

  # Grafik Parameter setzen
  $graph->set(
    title                        => $g_ueberschrift, # Titel der Tabelle
    x_label                 => "Temperatur", # Beschriftung der X-Achse
    x_label                 => $x_beschriftung, # Beschriftung der Y-Achse
    y_max_value         => 50, # Y-Achse Maximalwert
    y_min_value         => -20, # Y-Achse Minimalwert
    y_tick_number        => 14, # Y-Achse Abzahl der Aufteilungen
    y_label_skip         => 2,  # Y-Achse Zeile bei der Beschriftung übersprungen werden sollen
    long_ticks                => 1,  # Linien X,Y in die Grafik zeichnen
    x_ticks                        => 0,  # Línien X wieder ausblenden
  );

  # Grafik erstellen
  my $gd_bild = $graph->plot( \@graph_data );

  # ---------------------------------------------------------------------
  # Grafik in Datei zwischenspeichern
  open (FH, "> ../../$filename");
  binmode FH;
  # Grafik ausgeben / schreiben
  print FH $gd_bild->png;
  close(FH);
}# END - grafik_erstellen()



###############################################
sub db_abfrage {

  my($sql) = @_;

  # --------------------------------------------------------------------
  # Datenbank initialisieren
  my $datasource = "dbi:mysql:database=test";
  my $user = "root";
  my $pass = "";

  my $db = DBI->connect($datasource, $user, $pass)
     or die "Verbindung zur Datenbank nicht möglich: " . $DBI::errstr;

  # Datenbank Abfrage
  my $sth; # Datenbank Arbeits Parameter
  $sth = $db->prepare($sql)
     or die "prepare nicht möglich";
  $sth->execute()
     or die "execute nicht möglich";

  my @row; # Zwischenspeicher für Datenbankzeile
  my @rueckgabe; # Rückgabe Array
  while (@row = $sth->fetchrow_array()){
     # Werte der Zeile durch ein ',' trennen
     #   und Zeilen in einem Array speichern
     push (@rueckgabe, join(",",@row));
  }
  # Abfrage ende
  $sth->finish();

  # Datenbank schliessen
  $db->disconnect;

  # Werte als Array zurückgeben
  return @rueckgabe;

}# - END db_abgrage()



__END__


KAnn es sein, dass mein GD::Graph::lines gar keine new-Methode hat? Ich hab den Quelltext aus einem Beispiel im Netz, hier zu finden:
http://www.linuxfocus.org/Deutsch/July2004/article342.shtml

Würde mich über Hilfe sehr freuen!

Vielen Dank im Voraus,
Rthe1
Rthe1
 
Posts: 2
Joined: 06. December 2006 21:13

Postby deepsurfer » 07. December 2006 13:52

In dem Beispiel Script (LINK) wird der "new" Befehl gar nicht benutzt.
Woher beziehst du die Info das "new" eingesetzt werden könnte.
chirio Deep
Wie sagte einst der MCP aus Tron auf dem Bildschirm zu schreiben Pflegte
" ... end of communication ... "
User avatar
deepsurfer
AF Moderator
 
Posts: 6440
Joined: 23. November 2004 10:44
Location: Cologne
Operating System: Win-XP / Win7 / Linux -Debian

Postby Rthe1 » 07. December 2006 17:44

In der Subroutine grafik_erstellen wird new verwendet im Zusammenhang mit GD::Graph::lines!
Rthe1
 
Posts: 2
Joined: 06. December 2006 21:13


Return to Perl

Who is online

Users browsing this forum: No registered users and 23 guests