#perl
Вопрос:
Рассмотрим следующий код Perl:
#!/usr/bin/perl
use DBD::mysql;
use Data::Dumper;
$dbh = DBI->connect('DBI:mysql:database', 'user', 'password') or die "Can't connect to MySQL";
$sql = "SELECT OdL_ID FROM OdLs LIMIT 1";
$OdL_ID = $dbh->selectrow_array($sql);
print Data::Dumper->Dump([$OdL_ID]);
На моем «старом» SLES 11 SP4 он возвращается:
$VAR1 = '386379';
На моем «новом» openSUSE Leap 15.3 он возвращается:
$VAR1 = 386379;
Как я могу заставить свой «новый» openSUSE Leap 15.3 возвращать строку, а не целое число? (Обратите внимание, что у меня есть много сценариев Perl, у которых есть эта проблема!)
Комментарии:
1. Пожалуйста, прочитайте perlnumber и, в частности, числовые операторы и числовые преобразования . Perl использует такое представление числа, которое наилучшим образом подходит для текущей операции. Примечание: в вашем коде его достаточно использовать
print Dumper($OdL_ID);
.2. Тебе действительно нужно
Dumper
здесь? Может быть, просто попробоватьprint $OdL_ID
?3.
CAST
поле в aVARCHAR
или строковое значение возвращаемого значения (например, путем объединения его с пустой строкой)4. Обратите внимание, что использование кавычек DD не обязательно указывает на строку.
5. Привет, я переношу веб-приложение (perl, mysql, apache, jeasyui) с «SLES 11 SP4» на «openSUSE Leap 15.3». Все в порядке. Единственная проблема-с джесюи. В разных точках моего приложения я получаю следующую ошибку: «Неперехваченная ошибка типа: (промежуточное значение). Прописные буквы-это не функция»
Ответ №1:
Я мигрирую из веб-приложения (perl, mysql, apache, jeasyui) с «SLES 11 SP4» на «openSUSE Leap 15.3». Все в порядке. Единственная проблема-с джесюи.
В разных точках моего приложения я получаю следующую ошибку:
«Ошибка неперехваченного типа: (промежуточное значение).Прописные буквы-это не функция»
Я обнаружил, что проблема связана со строкой json. На моем «старом» сервере строка json: [{"OdL_ID":"386379"}]
На моем «новом» сервере строка json: [{"OdL_ID":386379}]
.
Причина этой разницы в том, что на моем старом сервере OdL_ID возвращается как строка ( $VAR1 = '386379'
), но на моем новом сервере OdL_ID возвращается как целое число ( $VAR1 = 386379
).
В базе данных OdL_ID определяется как «int», тогда, вероятно, «новый» сервер вернет правильную строку.
Возможным решением является преобразование всех этих значений из int в string. Но, возможно, есть более быстрое решение.