http://qs321.pair.com?node_id=1025690


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.

UPDATE:

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:

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

    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.