DBIx::ShowCaller a split()
Jan Kasprzak
kas na fi.muni.cz
Pondělí Březen 13 22:53:44 MET 2006
Zdravim,
mam fakt divny problem, ktery jsem omezil na DBIx::ShowCaller nebo
split(). Testovaci skript je tento (nedivejte se na ruzne neobratnosti,
toto vzniklo postupnym orezavanim vetsi veci za ucelem zjisteni, kde je
problem).
-----------------------------------------------------------
#!/usr/bin/perl
use strict;
use DBIx::ShowCaller;
# use DBI;
my $dbh = DBIx::ShowCaller->connect('dbi:Oracle:', 'dbuser', 'dbpass')
# my $dbh = DBI->connect('dbi:Oracle:', 'dbuser', 'dbpass')
or die;
my $temp_file = "/tmp/docasny.txt";
open(TEMP, $temp_file) or die "Soubor $temp_file nelze otevrit: $!\n";
my $text = join('',<TEMP>);
close TEMP;
for my $radek (split (/\n/, $text)) {
my $rv;
($rv) = $dbh->selectrow_array('SELECT 1 FROM DUAL');
# ($rv) = $dbh->selectrow_array('SELECT 1 FROM DUAL');
if ($rv) { print "je ok\n"; } else { print "NENI OK!\n"; }
last;
}
$dbh->disconnect;
-----------------------------------------------------------
Tohle kdyz spustim, tak vrati "NENI OK". Kdyz ale tentyz SELECT
provedu dvakrat (odkomentuju dalsi radek), tak podruhe uz to vrati
spravnou hodnotu. Dokonce staci pred tim selectrow_array() zavolat
nejake jine $dbh->prepare() nebo dokonce jen $dbh->ping. selectrow_arrayref
se chova stejne. Kdyz selectrow_array rozepisu na prepare, execute
a fetchrow_array, tak program funguje.
Je to neco s tim splitem - kdyz nacitani upravim pres pole takto:
my @radky = <TEMP>;
for my $radek (@radky) {
tak program funguje i s jednim selectem.
Dalsi mozny zdroj problemu je DBIx::ShowCaller: kdyz misto DBIx::ShowCaller
pouziju jen DBI (dva zakomentovane radky nahore), tak to taky funguje.
Pak jsem si hral se souborem /tmp/docasny.txt - ma-li 1005 neprazdnych
radku, program selze. Ma-li 1004, je vse OK. Zkousel jsem, ze nezalezi
na delce radku, staci mit jednoznakove radky, dokonce i skoro vsechny
prazdne radky (aspon jeden musi byt neprazdny).
Zkousel jsem Linux/i386 a Linux/ia64, chova se to na obou stejne (a jsou
tam ruzne verze Oracle klienta, pokud vim). Perl je 5.8.6.
Divne, coz? ma nekdo nejake napady, proc se to chova zrovna
takto?
-Y.
--
| Jan "Yenya" Kasprzak <kas at {fi.muni.cz - work | yenya.net - private}> |
| GPG: ID 1024/D3498839 Fingerprint 0D99A7FB206605D7 8B35FCDE05B18A5E |
| http://www.fi.muni.cz/~kas/ Journal: http://www.fi.muni.cz/~kas/blog/ |
> Specs are a basis for _talking_about_ things. But they are _not_ a basis <
> for implementing software. --Linus Torvalds <
Další informace o konferenci Perl