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 examining the Monastery: (8)
As of 2014-12-26 04:52 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (165 votes), past polls