http://www.perlmonks.org?node_id=642184


in reply to Re^2: How to write a program to read stdin or command line?
in thread How to write a program to read stdin or command line?

if that's what the OP means by "stdin or command line",

Seems it was.

you could also use -p instead of -n:

You could, but I wouldn't as it is less flexible than -n.

If you want to omit some lines from the output, you can't do that if you are also using -l


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^4: How to write a program to read stdin or command line?
by ikegami (Patriarch) on Oct 03, 2007 at 05:40 UTC

    Assuming I was talking about the general case, how is -p less flexible? And how does -l matter?

    perl -nle "print bar($_) unless foo($_)"
    perl -ple "next if foo($_); $_=bar($_)"

      With -p, whilst you can conditionally undef $_ to avoid it being printed; if you are also using -l, you will get unwanted blank lines:

      C:\test>type junk.txt 1 2 3 4 5 C:\test>perl -nle"$_ & 1 and print" junk.txt 1 3 5 C:\test>perl -ple"$_ & 1 or undef $_ and next" junk.txt 1 3 5

      And in fact the next in your example serves no purpose:

      C:\test>perl -ple"$_ & 1 or undef $_" junk.txt 1 3 5

      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.
        Yeah, I was confused, sorry.

      perl -ple "next" still prints every line, so, yes, -p is less flexible based on your fine examples.

      If you want to omit some lines from the output, you can't do that if you are also using -l

      My first reaction to that is that the final -l was supposed to be a -p. That would certainly make sense to me, but I can't say for sure that it is what was intended.

      - tye