Получение неожиданных результатов в динамическом массиве perl qw - PullRequest
0 голосов
/ 08 марта 2019

Я зацикливаюсь на запросе и пытаюсь создать динамический массив qw.

my $f_name_string = '';
while($sth->fetch)
{
    $f_name_string.=$fname.=" "
}
$sth->finish();
my @FNAME_ORDER = (qw('$f_name_string'));

print("@SENSOR_ORDER"); печатает '$f_name_string'

Ответы [ 2 ]

4 голосов
/ 08 марта 2019

qw не интерполируется.И я не знаю, почему вы добавляете пробелы к $fname, используя $fname .= ' ' вместо $fname . ' '.

while ($sth->fetch)
{
    $f_name_string .= $fname . ' ';
}

имеет больше смысла, но еще больше смысла в том, чтобы не создавать строкуво-первых:

my @FNAME_ORDER; # why all uppercase anyway?
while ($sth->fetch)
{
    push @FNAME_ORDER, $fname;
}
$sth->finish();

Это имеет больше смысла.Если вы хотите распечатать его или позже создать строку, разделенную пробелами, это легко сделать, проще, чем разделить пробелами (в случае, если любой $fname может содержать пробел).

3 голосов
/ 08 марта 2019
qw( foo bar )

- это сокращение от

split ' ', q( foo bar )    # q() = Single quotes, doesn't interpolate.

, поэтому вы можете использовать

my @fname_order = split ' ', $f_name_string;

, но было бы разумнее просто заполнить массив напрямую.

my @fname_order;
while($sth->fetch) {
    push @fname_order, $fname;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...