Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number

Re: Angle operator

by jerryhone (Sexton)
on Oct 20, 2021 at 16:01 UTC ( #11137806=note: print w/replies, xml ) Need Help??

in reply to Angle operator

In the debugger
DB<33> l 72-76 72 73: $failures = $oldfails = 0 ; 74 75: while( <> ) { 76: &assert ( (substr($_,0,4) eq "573\r") , "EC 573 is mis +sing 573^M at start--" ) ; DB<34> c 75 main::unroll_and_parse_ec573(/opt/PRD/default/bin/ec2gen:75): 75: while( <> ) { DB<35> x <> empty array DB<36> n main::unroll_and_parse_ec573(/opt/PRD/default/bin/ec2gen:76): 76: &assert ( (substr($_,0,4) eq "573\r") , "EC 573 is mis +sing 573^M at start--" ) ;
I've restarted the process and continued directly to line 75 - the 'while' loop I've then dumped out the content of the STDIN file handle - it's empty. Then 'next' and I'm in the loop - why!

Replies are listed 'Best First'.
Re^2: Angle operator [updated]
by jo37 (Chaplain) on Oct 20, 2021 at 16:58 UTC

    At first sight this behaviour looks very strange. If there was any data available via <>, the command x <> would consume all of it and the loop would not be entered. I've played a bit with this setup and are able to reproduce such a thing. If <> is exhausted and the final returned undef is ignored, the next call to <> will read from STDIN, even if file names were provided via @ARGV.

    This behaviour is documented in I/O Operators.

    I guess there is some part in the script that ignores an undef return from <> or evaluates it in list context before the loop in question. And there are named files in addition to data from STDIN.


    ...the loop would not be entered.

    This it not true and is not what I wanted to say. The loop is entered, but it will wait for input from STDIN.


      Thanks for the link. I think I've read it before but so many years ago, I'd forgotten how magical (or maybe devilish!) diamond operators are. I'm away from my desk right now so will take another look in the morning, but it is true that the script has ARGV processing including composite arguments and a STDIN redirection(<) on the command line, so there's every possibility that there's some quirkiness that the Perl versions have handled differently. This is the only viable patch I can come up with...
      while ( <> ) { next if (length($_) == 0); . .
Re^2: Angle operator
by Corion (Patriarch) on Oct 20, 2021 at 16:14 UTC

    Maybe @ARGV has more files to read in?

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (1)
As of 2023-06-05 00:44 GMT
Find Nodes?
    Voting Booth?
    How often do you go to conferences?

    Results (22 votes). Check out past polls.