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


in reply to Using a scalar as a constant?

wxTE_MULTILINE actually is a function which has some value, and that value seems to be not the string "wxTE_MULTILINE". So you can do it like this:

... my $style = wxTE_MULTILINE(); Wx::TextCtrl->new( $self, -1, "", [5, 10], [-1, -1], $style );

Update: Fixed a typo spotted by Fletch

Replies are listed 'Best First'.
Re^2: Using a scalar as a constant?
by Anonymous Monk on Oct 15, 2008 at 13:26 UTC
    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?

      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->() }
        That did the trick...Thanks!
      why not use xrc?
        lol...I've never heard of xrc but looking at it know it seems I'm reinventing the wheel :(