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

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
mlevel
мл. сержант
Сообщения: 105
Зарегистрирован: 2009-09-28 15:31:39

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

Непрочитанное сообщение mlevel » 2010-12-24 22:57:03

Скрипт должен сгенерировать 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();

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

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

Непрочитанное сообщение ProFTP » 2010-12-26 22:41:58

нужно анализировать каждую строку и смотреть отладку, смотреть то что в переменныех и как оно сравнивает...
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

mlevel
мл. сержант
Сообщения: 105
Зарегистрирован: 2009-09-28 15:31:39

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

Непрочитанное сообщение mlevel » 2010-12-27 1:09:44

Если:

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

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

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

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

mlevel
мл. сержант
Сообщения: 105
Зарегистрирован: 2009-09-28 15:31:39

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

Непрочитанное сообщение mlevel » 2010-12-28 0:50:51

фигня вообще странная!

поменял:

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

$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: