Почему я получаю странный вывод из Perl с использованием SQL? - PullRequest
2 голосов
/ 06 мая 2010

Вот мой Perl-код:

foreach my $line  (@tmp_field_validation)
{
        chomp $line;
        my ($cycle_code,$cycle_month,$cycle_year)= split /\s*\|\s*/, $line;
        $cycle_code=~ s/^\s*(.*)\s*$/$1/;
        $cycle_month=~ s/^\s*(.*)\s*$/$1/;
        $cycle_year=~ s/^\s*(.*)\s*$/$1/;
        print "$line\n";
        print "$cycle_code|$cycle_month|$cycle_year";
}

Вот вывод:

         1          10       2009
1           10       2009||

Что здесь не так? Я ожидал, что трубы будут между переменными. Почему трубы печатаются после всех трех переменных?

РЕДАКТИРОВАТЬ: tmp_field_validation является выводом запроса SQL, который имеет оператор выбора, как:

select cycle_code,cycle_month,cycle_year from ....

, поэтому при выполнении запроса в TOAD выводятся в виде 3 разных столбцов. но тот же запрос при использовании в этом сценарии, как это возможно, что выходные данные рассматриваются как одно поле цикл_код

Ответы [ 2 ]

4 голосов
/ 06 мая 2010

Вы должны добавить следующую строку в начало вашего кода:

use warnings;

Или, если он у вас уже есть, вы должны обратить внимание на полученные предупреждения.Другие правильно указали, что в вашей входной строке нет буквальных каналов.Я думаю, что вы действительно хотите что-то вроде этого:

use strict;
use warnings;

my @tmp_field_validation = ("         1          10       2009\n");

foreach my $line  (@tmp_field_validation)
{
        chomp $line;
        $line =~ s/^\s*//;
        my ($cycle_code,$cycle_month,$cycle_year)= split /\s+/, $line;
        print "$line\n";
        print "$cycle_code|$cycle_month|$cycle_year";
}

Выводит следующее:

1          10       2009
1|10|2009
3 голосов
/ 06 мая 2010

Поскольку вся строка хранится в переменной $ cycle_code. Две другие переменные являются пустыми строками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...