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


in reply to Re: Using a scalar as a constant?
in thread Using a scalar as a constant?

I should have given more details initially. The wxTE_MULTILINE value is being retrieved from an XML file so I'm running into the same issue. This is what my XML entry looks like if it helps
<text_ctrl internal_name="text_ctrl_details" parent="-1" value="" x_coordinate="100" y_coordinate="53" x_size="400" y_size="110" style="wxTE_MULTILINE" />
I'm then using XML::Twig to parse the XML so my actual code looks like this for creating the TextCtrl:
Wx::TextCtrl->new( $parent_panel, -1, $entry->att('value'), [$entry->a +tt('x_coordinate'), $entry->att('y_coordinate')], [$entry->att('x_siz +e'), $entry->att('y_size')], $entry->att('style') );
I've tried making it a function in the XML file and it still fails to show up. It does however work if I assign the constant to a scalar like you described.

Any thoughts?

Replies are listed 'Best First'.
Re^3: Using a scalar as a constant?
by Corion (Patriarch) on Oct 15, 2008 at 13:29 UTC

    Ah. If you have

    my $style = 'wxTE_MULTILINE';

    and want to get at the value returned by the constant/function wxTE_MULTILINE, then you have to use eval:

    print $style; $style = eval $style; die $@ if $@; print $style;
      An eval is possible, but some people rather avoid eval. You can avoid eval by making use of a symbolic reference:
      my $style = 'wxTE_MULTILINE'; { no strict 'refs'; say &$style; # or: say $style->() }
        You can even do it in a strict safe manner :)
        use constant test => 5; if(my $sub = __PACKAGE__->can('test')) { print $sub->(),"\n"; }

                        - Ant
                        - Some of my best work - (1 2 3)

      That did the trick...Thanks!
Re^3: Using a scalar as a constant?
by Anonymous Monk on Oct 15, 2008 at 13:46 UTC
    why not use xrc?
      lol...I've never heard of xrc but looking at it know it seems I'm reinventing the wheel :(