Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things

Re: Joining Two Elements of an Array. Little Help Please.

by kennethk (Abbot)
on Sep 27, 2012 at 18:20 UTC ( #996058=note: print w/replies, xml ) Need Help??

in reply to Joining Two Elements of an Array. Little Help Please.

When posting code, a complete description including sample input/output is helpful. See How do I post a question effectively?. Independent of that, I can identify a few problems with your posted code snippet.

  1. You don't have a closing curly on your foreach loop. I assume this is supposed to be trailing, which is important for the scoping issues I'm about to raise.
  2. You stash the results of your split in @listOfItems, but your pushes use @listofItems. Perl is case sensitive, so these are different variables. This would have been caught using strict -- see Use strict warnings and diagnostics or die.
  3. By declaring @array1, @array2 and @array3 with my within your foreach loop, you are creating variables which are scoped to that loop and thus wiped every iteration. As a result, you can't accumulate information in them. This would have been caught by strict when you tried to access the arrays outside the loop scope.
  4. You mean to access an array slice, but proper syntax there would be @listOfItems[0..1], not $listOfItems[0..1]. The leading $ sigil tells Perl you want a single scalar, and so .. is interpreted as the flip-flop operator -- see Range Operators for documentation. If you had warnings on, it would have complained. My guess is that this is the bug in your actual source code, since it manifests as looking like your join failed.

So taking all this into account, a working version of your code might look like:

use strict; use warnings; use Data::Dumper; my @sorted = qw(1.2.3 a.b.c literal.b.c); my @array1; my @array2; my @array3; foreach my $results (@sorted) { + my @listOfItems = split( /\./, $results); if ( $listOfItems[0] =~ /literal/ ) { $listOfItems[0] = join(".", @listOfItems[0..1]); + } push (@array1, $listOfItems[0]); push (@array2, $listOfItems[1]); push (@array3, $listOfItems[2]); # @array1 should contain the newly conjoined $listOfItems[0] } print Dumper \@array1;

You may find a read through of Basic debugging checklist helpful -- it's quite useful for demonstrating how to track all of the above issues down.

#11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.

Replies are listed 'Best First'.
Re^2: Joining Two Elements of an Array. Little Help Please.
by ishootperls (Novice) on Sep 27, 2012 at 21:38 UTC

    Got it ! Thank you so much for that valuable piece of information. Worked out just beautifully.

    "An incendiary Perl will solve that problem" :-) - myself

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://996058]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (4)
As of 2018-02-19 08:55 GMT
Find Nodes?
    Voting Booth?
    When it is dark outside I am happiest to see ...

    Results (260 votes). Check out past polls.