Leser: 24
1
2
3
4
5
6
7
8
9
10
eval{$sth->execute()};
if($@){
print join "\n", $@;
}
else{
while( my $ref = $sth->fetchrow_arrayref){
$self->{CALLBACK}($ref);
#print "$ref->[0]\n";
}
}
2011-03-23T09:21:23 rostiGibt es da außer eval noch andere Möglichkeiten?
QuoteNein. eval { } ist halt das, was dafuer gut ist, exceptions zu fangen. Was willst du mehr?
2011-05-05T13:01:21 GwenDragonUnd wieso kann beim zweiten Aufruf nichts fehlschlagen? Das ist rein theoretisch möglich.
Quotesondern als Text in einer Variablen zwischenzuspeichern.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
# URL-Details als Callback sub cb_urldetails{ my $self = shift; # in der DB Klasse my $cbref = shift; # CodeRef CallbackFunktion my $url = shift; my $q = q(SELECT ref, FROM_UNIXTIME(ts) as date, hugo FROM log WHERE url=? ORDER BY date DESC); my $st = $self->{DBH}->prepare($q); eval{ $st->execute($url); }; if($@){ $self->{EVE} = $@; return $@; } else{ if(ref $cbref eq 'CODE'){ while(my $ref = $st->fetchrow_hashref){ &$cbref($ref); # Callback } } } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
sub TIEARRAY{ my $class = shift; my $ref = shift; my $self = $class->new; return if $@; if(exists $ref->{url}){ my $q = q(SELECT ref, FROM_UNIXTIME(ts), hugo FROM log WHERE url=? ORDER BY ts DESC LIMIT 10); my $st = $self->{DBH}->prepare_cached($q); eval{ $st->execute($ref->{url}); $self->{STH} = $st; # Statement Handle an Objekt $self->{CB} = $ref->{callback}; # Callbackfunktion an Objekt }; return if $@; } return $self; }
1 2 3
tie (my @ura, 'TieLog', { url => '/praxis', callback => \&cb_array}) || die "Fehler: $@"; print "============= Daten kommen ==============\n\n"; tied(@ura)->callback;
1 2 3 4 5 6 7
# CallBack sub callback{ my $self = shift; while(my $ref = $self->{STH}->fetchrow_arrayref){ $self->{CB}($ref); } }