bug in cygwin perl 5.6.1?

Christopher Faylor cgf@redhat.com
Sun Feb 3 13:29:00 GMT 2002


On Sun, Feb 03, 2002 at 10:03:36PM +0100, Gerrit P. Haase wrote:
>Am 2 Feb 2002 um 17:58 hat Rhet Turnbull geschrieben:
>
>>Gerrit P. Haase wrote:
>>> Why?  Where is docu about this?
>>
>>The perl documentation for $^S in the perlvar manpage states:
>>
>>$^S     Current state of the interpreter.  Undefined if
>>        parsing of the current module/eval is not finished
>>        (may happen in $SIG{__DIE__} and $SIG{__WARN__}
>>        handlers).  True if inside an eval(), otherwise
>>        false.
>>
>>The "True if inside an eval(), otherwise false" is what I was getting at.  I
>
>Previous mail:
>
>>>>There seems to be a bug in Cygwin's perl (5.6.1). The
>>>>following code:
>>>>
>>>>perl -e 'print $^S || 0;eval {print $^S || 0}; print
>>>>$^S || 0;'
>>>>
>>>>should produce '010'
>
>>ran into this since I was writing a custom SIG{__DIE__} handler (which needs
>>to know if you're inside an eval where die is an exception catching
>>mechanism or in normal code where die means to exit with error.)  The bug is
>>that after executing an eval(), $^S stays true even though it should be
>>false outside the scope of the eval.
>
>Hmmm, I'm still confused a little.  Isn't '010' as TRUE as '011'?

There are three numbers here '0', '1', '1'.  The third number should be '0'.

Maybe this would help:

perl -e 'print $^S || 0, "\n";eval {print $^S || 0, "\n"}; print $^S || 0, "\n";'

This should print:

0
1
0

Instead, it prints:

0
1
1

This indicates, to me, that perl is not resetting the "I'm in an eval", probably
when all of the statements are on the same line, or something.

cgf

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list