Каковы наиболее распространенные причины, по которым я получаю эту ошибку при запуске сценария Perl:
Memory fault(coredump)
Я заранее запускаю две команды SQL, которые хранят только ~ 1500 строк, каждая с 6 полями. SQL отлично работает из скрипта, поэтому я не думаю, что получаю ошибку от этого. И половина моего кода выполняется до того, как он взорвет бомбу и выдаст мне эту ошибку.
Итак, каковы наиболее распространенные причины этой ошибки и чем может быть моя причина?
РЕДАКТИРОВАТЬ - вот код, который работает
my $i;
$i = 0;
while ($DBS->SQLFetch() == *PLibdata::RET_OK)
{
while ($i != $colnamelen)
{
if ($i == 1)
{
$rowfetch = $DBS->{Row}->GetCharValue($colname[$i]);
$rowfetch =~ s/(?=..$)/:/;
printline($rowfetch);
$i++;
}
if ($i == 2)
{
$rowfetch = $DBS->{Row}->GetCharValue($colname[$i]);
$rowfetch =~ s/(?=..$)/:/;
printline($rowfetch);
$i++;
}
if ($i == 10)
{
$rowfetch = $DBS->{Row}->GetCharValue("meetdays");
$rowfetch =~ s/-//gi;
printline($rowfetch);
$i++;
}
if ($i == 12)
{
$rowfetch = $DBS->{Row}->GetCharValue("fullname");
my ($lname, $fname) = split /,\s*/, $rowfetch;
$rowfetch = $fname;
printline($rowfetch);
$rowfetch = $lname;
printline($rowfetch);
$i=$i+2;
}
else
{
$rowfetch = $DBS->{Row}->GetCharValue($colname[$i]);
printline($rowfetch);
$i++;
}
}
$i=0;
printf $fh "\n";
}
Вот код, который не работает - все, что было сделано, это оптимизировала команду sql fetch
my $i;
$i = 0;
while ($DBS->SQLFetch() == *PLibdata::RET_OK)
{
while ($i != $colnamelen)
{
$rowfetch = $DBS->{Row}->GetCharValue($colname[$i]);
if ($i == 1)
{
$rowfetch =~ s/(?=..$)/:/;
printline($rowfetch);
$i++;
}
if ($i == 2)
{
$rowfetch =~ s/(?=..$)/:/;
printline($rowfetch);
$i++;
}
if ($i == 10)
{
$rowfetch =~ s/-//gi;
printline($rowfetch);
$i++;
}
if ($i == 12)
{
my ($lname, $fname) = split /,\s*/, $rowfetch;
$rowfetch = $fname;
printline($rowfetch);
$rowfetch = $lname;
printline($rowfetch);
$i=$i+2;
}
else
{
printline($rowfetch);
$i++;
}
}
$i=0;
printf $fh "\n";
}
Да, и, кстати, до того, как этот цикл переходит в действие, есть работающий оператор SQL ... Я просто не хотел тратить пространство.