Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re: Multiple foreach loops in single statement

by ikegami (Patriarch)
on Oct 23, 2012 at 16:40 UTC ( [id://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.)

Replies are listed 'Best First'.
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

        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. :)

        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.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others browsing the Monastery: (4)
As of 2024-03-19 07:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found