in reply to Re^2: <> oddity ?
in thread <> oddity ?

> Why would this program then NOT wait for any further input via STDIN ?

Perl can't read your mind, if you want to read from STDIN, explicitly use STDIN instead of stretching DWIM magic behavior till it breaks.


actually your example is reading from STDIN, but maybe you should stop the redirecting from file to STDIN if you wanna read from interactive input (keyboard).

see select

Cheers Rolf

( addicted to the Perl Programming Language)

Replies are listed 'Best First'.
Re^4: <> oddity ?
by Krambambuli (Curate) on Mar 27, 2013 at 12:18 UTC
    Just to clarify:

    wishing to deal with various use modes in a perfectly similar manner, I wanted to have 3 distinct modes of calling the program behaving absolutely similar, with minimum fuss about that in the code:

    $ sample.txt sample1.txt ... sampleN.txt
    $ <sample.txt
    $ cat sample.txt sample1.txt ... sampleN.txt |

    All is well with this with the use of <>, except the fact that once EOF is seen, no further attempt to read from <> is allowed - or STDIN is opened, and will wait forever if you're unaware of it...

    Thanks you helping to sort this out.

    UPDATE As perlop says in 'I/O Operators':

    The <> symbol will return "undef" for end-of-file only once. If you call it again after this, it will assume you are processing another @ARGV list, and if you haven't set @ARGV, will read input from STDIN.

    Now I know :)
Re^4: <> oddity ?
by Krambambuli (Curate) on Mar 27, 2013 at 11:58 UTC
    OK, got it solved and understood now, thanks.

    I actually just want NOT to read from STDIN when there is a file given in the command line, and stop reading when that file is exhausted.

    Turns out that I should NOT any further $line = <> once that hit EOF, because the immediate next attempt to do so will just open STDIN.

    Ahaa... :)

    Thank you.