Страница 1 из 1

Perl. странный глюк

Добавлено: 2010-12-24 22:57:03
mlevel
Скрипт должен сгенерировать 10 случайных чисел - идентификаторов, которые не начинаются на 0 и отсутсвуют в БД.
Но почему то проходит только 1 итерация, и скрипт не завершаеться, а дальше висит в процесах. В чем может быть причина? Спасибо.

Код: Выделить всё

use DBI;
use strict;
use warnings;
use diagnostics;

sub GenTrid {
my $i = 1;
my ($pid, $buf, $uidd, $set);
while($i <= 10) {
    $buf = `cat /dev/urandom | tr -cd "[:digit:]" | head -c10`;
    $set = &Test($buf);
     if((substr($buf,0,1) ne 0) && !$set) {
        print $i.' '.$buf."\n";
        $i++;
    }
    else {
        print "false\n";
    }
}
}
sub Test {
    my $buf = $_[0];
    my $st;
    my $Query = "SELECT `id` FROM `test` WHERE `ptrid` = '$buf' LIMIT 1";
    my $dsn = "DBI:mysql:database=test;host=295.260.204.3;port=3306";
    my $dbh = DBI->connect($dsn, 'tarifer', '562346') || die(DBI->errstr);
    my $sth = $dbh->prepare($Query);
    $sth->execute();
    my @res = $sth->fetchrow_array();
    (!$res[0])?($st = 0):($st = 1);
    return $st;
}

&GenTrid();

Re: Perl. странный глюк

Добавлено: 2010-12-26 22:41:58
ProFTP
нужно анализировать каждую строку и смотреть отладку, смотреть то что в переменныех и как оно сравнивает...

Re: Perl. странный глюк

Добавлено: 2010-12-27 1:09:44
mlevel
Если:

Код: Выделить всё

$buf = `cat /dev/urandom | tr -cd "[:digit:]" | head -c10`;
меняю на:

Код: Выделить всё

$buf = '22';
то все работает отлично... :unknown:

Re: Perl. странный глюк

Добавлено: 2010-12-28 0:50:51
mlevel
фигня вообще странная!

поменял:

Код: Выделить всё

$buf = `cat /dev/urandom | tr -cd "[:digit:]" | head -c10`;
на:

Код: Выделить всё

$buf = `/usr/local/bin/apg -a 1 -n 1 -x 10 -m 10 -M n`;

заработало... :smile: