It seems to be something to do with (de)referencing the constant.
Actually, running with perl -MO=Deparse shows that wxID_Yes, wxID_No, and wxID_CANCEL are subroutines:
given ($selection) {
when (wxID_YES()) {
print qq[You pressed: "Yes"\n];
}
when (wxID_NO()) {
print qq[You pressed: "No"\n];
}
when (wxID_CANCEL()) {
print qq[You pressed: "Cancel"\n];
}
}
And the documentation says that “A user-defined subroutine call or a method invocation” is treated as a boolean, meaning “true” if it returns any non-zero value! (You can easily confirm this by making your own subroutines that return 0 and 1, say, and you will see that the first when clause with the non-zero-returning sub is always successful.)
Update: Here’s the code I used for experimenting:
#! perl
use v5.14.1;
use strict;
use warnings;
use Wx qw(wxID_YES wxID_NO wxID_CANCEL);
sub ZERO { 0 }
sub ONE { 1 }
{
my $selection = wxID_NO;
print "selection is $selection\n";
print 'wxID_YES is ', wxID_YES(), "\n";
given ($selection)
{
when (ZERO) { print qq[Zero\n] }
when (ONE) { print qq[One\n] }
when (wxID_YES) { print qq[You pressed: "Yes"\n] }
when (wxID_NO) { print qq[You pressed: "No"\n] }
when (wxID_CANCEL) { print qq[You pressed: "Cancel"\n] }
default { print qq[Invalid selection\n] }
}
}
Output:
12:50 >perl 300_SoPW.pl
selection is 5104
wxID_YES is 5103
One
So, it looks as though this (strange) behaviour is exactly as expected (until changed in a later version of Perl?) In the meantime, either of the workarounds you suggest will get the job done. I haven’t found a “simpler/cleaner syntax.” :-(
Hope that helps,
Athanasius <°(((>< contra mundum
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
Outside of code tags, you may need to use entities for some characters:
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.
|
|