HP-User: Syntaxproblem bei Pfeilfunktion

Beitrag lesen

Hi hotto

Tipp: Verwende q() oder qq() für einfach bzw. doppelt quoten, das ist oftmals übersichtlicher.

Geht auch nicht :-(

Hier das Übungsprogramm. Im ersten Ausgabeteil wird die komplette CSV ausgegeben. Im Zweiten Teil sollte nur Felder mit "G" ausgegebenwerden. Das ganze sollte eine Übung zum ansprechen von CSV-Dateien als DB sein.m Sollte - weil es klappt einfach nicht. Aktueller Perl Code:

  
#!/usr/bin/perl  
  
# sollte in keinem Script fehlen  
use strict;  
use warnings;  
  
# DBI Modul Laden  
use DBI;  
  
# Verzeichnis mit dem Script finden.  
# "." muss nicht immer das Verzeichnis mit dem Script sein  
use FindBin '$Bin';  
  
# Sollte man machen.  
# es hilft die Dateinamen  
# von den Tabellennamen zu trennen.  
my %zuordnung=(  
              prospects => {  
              file => 'prospects.csv',  
              col_names   => ['Name', 'Address', 'Floors', 'Donated last year', 'Contact'],  
              },  
              );  
  
# Verbindung aufbauen  
my $dbh = DBI->connect("DBI:CSV:", undef, undef, {  
                                                  # Zeilenseparator  
                                                  csv_eol => "\x0A",  
                                                  # Spaltenseparator:  
                                                  csv_sep_char => ",",  
                                                  # Verzeichnis mit den Dateien  
                                                  f_dir => $Bin,  
                                                  # Zuordnung Dateiname -> Tabelle  
                                                  csv_tables => \%zuordnung,  
                                                  # bei Fehlern immer sterben:  
                                                  RaiseError => 1,  
                                                  }  
                      ) or die($DBI::errstr);  
  
# Testausgabe Nr.1: ganze CSV  
my $sth=$dbh->prepare('SELECT * FROM prospects');  
$sth->execute();  
while(my @row = $sth->fetchrow_array){  
                                      print join('; ',@row)."\n";  
                                      }  
$sth->finish;  
  
#Textausgabe Nr.2: sortierte CSV  
$sth = $dbh->prepare("SELECT * FROM prospects WHERE Name LIKE 'G%'");  
$sth->execute();  
while (my $row = $sth->fetchrow_hashref){  
                                        print qq(name = $row->{Name}  contact = $row->{Contact})."\n";  
                                        }  
$sth->finish();  
  
$dbh->disconnect();  

Diese "hash"-Geschichte macht mich echt noch fertig.
Hier die Ausgabe im Terminal inkl. Fehler:

-----------------------------------------------------------------------
Name; Address; Floors; Donated last year; Contact
Charlotte French Cakes; 1179 Glenhuntly Rd; 1; Y; John
Glenhuntly Pharmacy; 1181 Glenhuntly Rd; 1; Y; Paul
Dick Wicks Magnetic Pain Relief; 1183-1185 Glenhuntly Rd; 1; Y; George
Gilmour's Shoes; 1187 Glenhuntly Rd; 1; Y; Ringo
Use of uninitialized value in concatenation (.) or string at ./DB-Test.pl line 51.
Use of uninitialized value in concatenation (.) or string at ./DB-Test.pl line 51.
name =   contact =
Use of uninitialized value in concatenation (.) or string at ./DB-Test.pl line 51.
Use of uninitialized value in concatenation (.) or string at ./DB-Test.pl line 51.
name =   contact =
-----------------------------------------------------------------------

Ziel:
Es soll in der Namespalte alle datensätze angezeigt werden, die ein "G" enthalten oder mit "G" beginnen - so genau hab ich das Beispiel noch nicht verstanden. Aber es sollte doch zumindest ohne Fehlermeldung arbeiten.

Also: Wer einen Anhaltspunkt sieht, was hier falsch läuft, darf es mir gerne mitteilen. Ich bin nach unzähligen Versuchen mit meinem Latein am Ende.

Gruss HP-User

P.S.
(Ich hol mir jetzt erst einmal einen Caffe! Den hab ich mir verdient und der beruhigt die Nerven :-)