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