printing array problem

M

Mark Day

Any tips on what I'm doing wrong here appreciated.

I'm using perl version 5.6.1 on Win98,

and this test script i've written, I was hoping would print each element
of this array, on a new line, then print the array again in reverse order.

What actually output's is the same array twice with all elements printed
on the same line.

What is wrong with my attempt to reverse the array, adn why does each
scalar not print on a new line?

thanks.

--code snippet---

#!C:\perl\bin\perl

@array = qq(1 2 3 4 5 6 7 8 9 10 11 12 baker's dozen);

foreach (@array)

{

print $_;

print "\n";

}

@array = reverse @array;

foreach (@array) {

print $_;

print "\n";

}
 
M

Mark Clements

Mark said:
Any tips on what I'm doing wrong here appreciated.

I'm using perl version 5.6.1 on Win98,

and this test script i've written, I was hoping would print each element
of this array, on a new line, then print the array again in reverse order.

What actually output's is the same array twice with all elements printed
on the same line.

What is wrong with my attempt to reverse the array, adn why does each
scalar not print on a new line?

thanks.

--code snippet---

#!C:\perl\bin\perl

@array = qq(1 2 3 4 5 6 7 8 9 10 11 12 baker's dozen);

qq() gives you an interpolated string - man perlop. what you are
effectively doing here is

@array = "1 2 3 4 5 6 7 8 9 10 11 12 baker's dozen";

which will set $array[0] to "1 2 3 4 5 6 7 8 9 10 11 12 baker's dozen"
and leave the rest of the array empty.

you probably mean

my @array = qw(1 2 3 4 5 6 7 8 9 10 11 12 baker's dozen);

though that will give you "baker's" and "dozen" as separate array elements.

You can also skip the

@array = reverse @array

step

ie

foreach( reverse @array){

....

Mark
 
M

Mark Day

Mark said:
qq() gives you an interpolated string - man perlop. what you are
effectively doing here is

@array = "1 2 3 4 5 6 7 8 9 10 11 12 baker's dozen";

which will set $array[0] to "1 2 3 4 5 6 7 8 9 10 11 12 baker's dozen"
and leave the rest of the array empty.

you probably mean

my @array = qw(1 2 3 4 5 6 7 8 9 10 11 12 baker's dozen);
though that will give you "baker's" and "dozen" as separate array elements.

You can also skip the

@array = reverse @array

step

ie

foreach( reverse @array){

...

Mark


Great! thanks.
 
A

Anno Siegel

Mark Day said:
Any tips on what I'm doing wrong here appreciated.

I'm using perl version 5.6.1 on Win98,

and this test script i've written, I was hoping would print each element
of this array, on a new line, then print the array again in reverse order.

What actually output's is the same array twice with all elements printed
on the same line.

What is wrong with my attempt to reverse the array, adn why does each
scalar not print on a new line?

thanks.

--code snippet---

#!C:\perl\bin\perl

@array = qq(1 2 3 4 5 6 7 8 9 10 11 12 baker's dozen);

[snip]

Look up what qq() does. I guess you meant to say qw() instead.

Anno
 
G

Graham Wood

Mark said:
hoping would print each element
of this array, on a new line, then print the array again in reverse order.

What is wrong with my attempt to reverse the array, adn why does each
scalar not print on a new line?


#!C:\perl\bin\perl

@array = qq(1 2 3 4 5 6 7 8 9 10 11 12 baker's dozen);

Your problem is that you're using qq which will surround the contents of
the parenthesis with double quotes rather than qw which will surround
each word in the parenthesis with double quotes. You are basically
creating and array with one element in it: "1 2 3 4 5 6 7 8 9 10 11 12
baker's dozen" and reversing this then gives you the same single element
in reverse order.

Replace qq with qw and see what happens.

Graham
 
A

Anno Siegel

Graham Wood said:
Mark Day wrote:
[...]
@array = qq(1 2 3 4 5 6 7 8 9 10 11 12 baker's dozen);

Your problem is that you're using qq which will surround the contents of
the parenthesis with double quotes rather than qw which will surround
each word in the parenthesis with double quotes.

That is wrong. "qw()" surrounds the whole string with single quotes,
then splits the result on whitespace.

Anno
 
A

Anno Siegel

Anno Siegel said:
Graham Wood said:
Mark Day wrote:
[...]
@array = qq(1 2 3 4 5 6 7 8 9 10 11 12 baker's dozen);

Your problem is that you're using qq which will surround the contents of
the parenthesis with double quotes rather than qw which will surround
each word in the parenthesis with double quotes.

That is wrong. "qw()" interprets the whole string in single-quote
style, then splits the result on whitespace.

Anno
 
A

Anno Siegel

Graham Wood said:
Mark Day wrote:
[...]
@array = qq(1 2 3 4 5 6 7 8 9 10 11 12 baker's dozen);

Your problem is that you're using qq which will surround the contents of
the parenthesis with double quotes rather than qw which will surround
each word in the parenthesis with double quotes.

That is wrong. "qw()" treats the whole string as single quoted,
then splits the result on whitespace.

Anno
 
G

Graham Wood

Anno said:
Graham Wood said:
Mark Day wrote:
[...]
@array = qq(1 2 3 4 5 6 7 8 9 10 11 12 baker's dozen);

Your problem is that you're using qq which will surround the contents of
the parenthesis with double quotes rather than qw which will surround
each word in the parenthesis with double quotes.

That is wrong. "qw()" treats the whole string as single quoted,
then splits the result on whitespace.


Oh. Thanks

Graham
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,537
Members
45,020
Latest member
GenesisGai

Latest Threads

Top