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

Re: Multiple foreach loops in single statement

by ikegami (Pope)
on Oct 23, 2012 at 16:40 UTC ( #1000499=note: print w/ replies, xml ) Need Help??


in reply to Multiple foreach loops in single statement

Statement modifiers are not nestable. But since

do { ... } for ...;
is legal, so is
do { ... for ... } for ...;

But for readability's sake, just don't do that! Especially since

while (...) { ...}

and

do { ...} while ...;

have different semantics.

A functional language approach would probably achieve what you want better.

print map ord, split //, `cat file.pl`;

(Yeah, the outer loop is useless, as you can see.)


Comment on Re: Multiple foreach loops in single statement
Select or Download Code
Re^2: Multiple foreach loops in single statement
by gurpreetsingh13 (Scribe) on Oct 24, 2012 at 03:36 UTC
    Great. Just noticed that we can provide a list too in split function. The docs however mention EXPR --split /PATTERN/, EXPR-- which I assumed to be a scalar.

    Anyways thanks for the help. This was what I wanted to achieve:

    perl -e 'print chr(ord()+1) foreach(split //,`cat file.pl`);'
    (a simple one liner to encrypt a file via ascii shift).

      ...we can provide a list too in split function.

      Sorry, no. split operates on a single string (a scalar), but not on a list:

      13:57 >perl -wE " $s = q[abc]; $t = q[mno]; say for split(//, $s, $t); + " Argument "mno" isn't numeric in split at -e line 1. a b c 14:06 >perl -wE " $s = q[abc]; $t = q[mno]; say for split(//, ($s, $t) +); " Useless use of a variable in void context at -e line 1. m n o 14:06 >perl -wE " @u = (q[abc], q[mno]); say for split(//, @u); " 2 14:06 >
      The docs however mention EXPR ... which I assumed to be a scalar.

      Yes, your original assumption was correct. But split returns a list, which is why the output of split can be the subject of a foreach or a map.

      Hope that helps,

      Athanasius <°(((><contra mundum

        No. See it clearly.
        perl -e '@lines=`cat file.pl`;print $#lines,"\n", $lines[2];'

        Output:

        18 use Unicode::Collate::Locale;

        this returns a list infact - a list of strings after pumping in entire file splitted on newline.

        And we are providing this list in place of an EXPR in split which makes it a point that we can provide a list too instead of a string.

        I considered myself to have given a good start on perl(as it was in some other languages)....but the wisdom of monks here and my weakness in basics shows there is still a long way to go and a lot to know....

        Thanks for your help. :)

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1000499]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (4)
As of 2015-07-05 02:53 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (60 votes), past polls