2

Here is my Perl code:

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";
}

Here is the output:

         1          10       2009
1           10       2009||

What's wrong over here? I expected the pipes to be between the variables. Why are the pipes getting printed after all the three variables?

EDIT: tmp_field_validation is the output of an sql query which has a select statement like :

select cycle_code,cycle_month,cycle_year from ....

so the output is coming as 3 different columns when i executed the query in TOAD. but the same query when used in this script how could it be possible that the output is considered as the single field cycle_code

2 Answers 2

4

You should add the following line to the top of your code:

use warnings;

Or, if your already have it there, you should pay attention to the warning messages you receive. Others have correctly pointed out that your input line does not have any literal pipes. I think you really want something like this:

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";
}

Outputs the following:

1          10       2009
1|10|2009
Sign up to request clarification or add additional context in comments.

Comments

3

Because the entire line got stocked in the $cycle_code variable. The other two variables are empty strings.

1 Comment

This is actually an entirely correct answer, but it would be helpful to mention that the reason it happens is because the split is on vertical vertical bars (surrounded by optional whitespace), and there are no vertical bars in the input.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.