Schrift
[thread]9047[/thread]

Mit if anweisung zur sub springen?



<< >> 9 Einträge, 1 Seite
Gast Gast
 2007-05-29 17:14
#77051 #77051
Hallo ich habe 4 kleine skripte geschrieben, und möchte diese zusammen fügen. und eben mit den parameter aufrufen "update", "select","delete","update" ausfürhern.

wieso funktionieren die skripte nun nicht mehr????

hier meine Skript:
wenn ich das skript mir "perl compl.pl update"
aufrufe kommen folgen fehler wegen den variablen:

+++++++++
Scalar found where operator expected at compl.pl line 34, near "$cm$
  or"
       (Missing operator before    or?)
Bareword found where operator expected at compl.pl line 34, near "$
  or croak"
       (Missing operator before croak?)
Bareword found where operator expected at compl.pl line 45, near "$
  or croak"
       (Missing operator before croak?)
Global symbol "$cm" requires explicit package name at compl.pl line 33.
syntax error at compl.pl line 34, near "$cm$
  or "
Global symbol "$or" requires explicit package name at compl.pl line 34.
Global symbol "$or" requires explicit package name at compl.pl line 45.
syntax error at compl.pl line 45, near "$
  or croak "
Execution of compl.pl aborted due to compilation errors.
+++++++++++++++++

hier mein skript


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
#!/usr/bin/perl


use strict;
use warnings;

use Carp;
use DBI;


my $dbh = DBI->connect("dbi:Pg:dbname=raum;host=127.0.0.1;port=5432", "perl_db", "test",{ RaiseError => 0, AutoCommit => 0}) or croak $DBI::errstr;
print "\n Erfolgreich mit Datenbank verbunden \n \n";

if ($ARGV[0]=='update'){
       sub update;
}
elsif ($ARGV[0]=='insert'){
       sub insert;
}
elsif ($ARGV[0]=='delete'){
       sub delete;
}
elsif ($ARGV[0]=='select'){
       sub select;
}
else {
print "Falscher Parameter!";
}

#####UPDATE######

sub update {
my $cmd = 'UPDATE t_personen SET name= ? WHERE id=?; '; my $sth = $dbh->prepare_cached($cm$
  or croak "SQL prepare failed '$cmd': " . $dbh->errstr;

my $rc = $sth->execute($ARGV[1],$ARGV[2]);

$dbh->commit() or die "Failed to save modified data: " . $dbh->errstr;
}

##### delete#######
.
.
.
.
renee
 2007-05-29 17:21
#77052 #77052
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Hier ist zum Beispiel ein Fehler $dbh->prepare_cached($cm$ (sub update)

Worte vergleicht man übrigens mit eq, also:
Code (perl): (dl )
if($ARGV[0] eq 'update'){...}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Bschorf
 2007-05-29 17:41
#77053 #77053
User since
2007-04-18
12 Artikel
BenutzerIn
[default_avatar]
k, danke renee, nun kommen keine fehlermeldungen mehr ^^

nur anscheinend fürhrt er die sub nicht aus.

habes es nun so
Code: (dl )
1
2
3
if($ARGV[0] eq 'update'){
        sub update;
}

ist doch ricjtig so , oder?
alleine funktioneirt die sub\n\n

<!--EDIT|Bschorf|1180446206-->
vayu
 2007-05-29 17:59
#77054 #77054
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
if($ARGV[0] eq 'update'){
update();
}


sonst definierst du eine leere sub lokal in der if-bedingung


und ich würde die Verbindung zur Datenbank erst machen, wenn du die Parameter geprüft hast :) erspart arbeit\n\n

<!--EDIT|vayu|1180447246-->
pq
 2007-05-29 22:16
#77055 #77055
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
siehe auch perlsub
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Bschorf
 2007-05-30 11:09
#77056 #77056
User since
2007-04-18
12 Artikel
BenutzerIn
[default_avatar]
mhh ich vertstehs nicht.....

habs nun so....


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if ($ARGV[0] eq 'update'){
update($ARGV[1],$ARGV[2]);
}
if ($ARGV[0] eq 'insert'){
insert($ARGV[1],$ARGV[2]);
}
if ($ARGV[0] eq 'delete'){
delete($ARGV[1]);
}
if ($ARGV[0] eq 'select'){
select();
}
else {
print " >>> Falscher Parameter! (insert/update/delete/select) <<<\n\n";
}


und er springt immer nich nicht zu der sub, auch wenn ich die () leer lasse.


verzweifelbin
renee
 2007-05-30 11:40
#77057 #77057
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Gibt es eine Fehlermeldung? Aus den vielen if's solltest Du elsif's machen, also:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if ($ARGV[0] eq 'update'){
       update($ARGV[1],$ARGV[2]);
}
elsif ($ARGV[0] eq 'insert'){
       insert($ARGV[1],$ARGV[2]);
}
elsif ($ARGV[0] eq 'delete'){
       delete($ARGV[1]);
}
elsif ($ARGV[0] eq 'select'){
       select();
}
else {
    print "  >>> Falscher Parameter! (insert/update/delete/select) <<<\n\n";
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pq
 2007-05-30 11:43
#77058 #77058
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
select() und delete() sind perl-eigene funktionen!
siehe perldoc perlfunc und nenne die subroutinen um.
und mit "und er springt immer nich nicht zu der sub" kann man nicht viel anfangen.
was passiert stattdessen? fliegt der computer in die luft?\n\n

<!--EDIT|pq|1180511032-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Bschorf
 2007-05-30 12:04
#77059 #77059
User since
2007-04-18
12 Artikel
BenutzerIn
[default_avatar]
boah pq dank dir....
daran lags.....
habs die subs umbenannt und nun gehts.

Fehler hab ich keine angegeben, weil keine kommen ^^:-). Er hat eben nix gemacht.


VIELN DANk FÜR DIE HILFE.

lüppt nun
<< >> 9 Einträge, 1 Seite



View all threads created 2007-05-29 17:14.