You may want to try something like this:
@monks = ('Suaveant', 'iakobski', 'merlyn', 'boo_radley');
foreach (@monks) {
chop;
print;
}
The line while(<>) simply accepts input from STDIN until nothing else is received, so I don't see why you really want to use that. Secondly, the print should really be within the loop. The foreach loop will loop over each element in the array @monks and perform whatever operations you have within that block on that element. In this case, I think you want to do a chop and then a print - by putting it into the loop, you'll get this effect on every element of the array.
By running this snippet, I was able to produce the output you wanted: Suaveantiakobskimerlynboo_radle.
Hopefully, this makes a little more sense to you. You can go here for more information on foreach loops.
Good luck,
- Sherlock | [reply] [d/l] [select] |
You are not running the print within the foreach loop. So, once out of the foreach loop, $_ becomes whatever is coming from the diamond operator (which is typically the file stated on the command line).
If you run the print within the foreach loop it will print almost exactly what you think.
I say almost because you are chopping the last character from (for) each of those monks :-). If you want to get rid of newlines - which is not necessary in this case - use chomp instead of chop. | [reply] |
| [reply] [d/l] |
It nearly does if you put the print in the loop:
@monks = ('Suaveant', 'iakobski', 'merlyn', 'boo_radley');
while (<>) {
foreach (@monks) {
chop;
print;
}
}
then you get Suaveaniakobskmerlyboo_radle
iakobski | [reply] [d/l] |
Because $_ is only available in the scope of the current
block. So after the foreach block is finished $_ refers to
the read line.
Btw.: You should have expected
Suaveaniakobskmerlyboo_radle for using the chop ;-)
--
use signature;
signature(" So long\nAlfie"); | [reply] |
Given Sherlock's fix, your output will be Suaveaniakobskmerlyboo_radle --
chop hits each string, not just the last one.
hdp. | [reply] [d/l] |