samizdat has asked for the wisdom of the Perl Monks concerning the following question:

found the answer after studying widget_lib/balloon.pl, but _why_?

Goal: build balloon help for ScrlListbox dynamically

$bloon->attach( $toollist->Subwidget("scrolled"), -balloonposition => 'mouse', -msg => [@tooldescs] );
Here's the question: why do I need to enclose @tooldesc in square brackets?

Replies are listed 'Best First'.
Re: TK::Balloon
by William G. Davis (Friar) on Jan 07, 2005 at 15:10 UTC

    The square brackets create a brand new array out of nothing--an array without a name--and return a reference to it. By putting @tooldescs in brackets you end up with a reference to a new, anonymous array containing @tooldescs' elements.

    You can take a reference to @tooldescs itself using the backslash operator and give -msg that instead:

    $bloon->attach( $toollist->Subwidget("scrolled"), -balloonposition => 'mouse', -msg => \@tooldescs );

    but be forewarned that attach() can now modify @tooldescs directly. If that's OK, then you don't need the brackets, and you can get away with using the backslash. If it isn't, then use the brackets.

    See perlreftut and perlref for more.

      thank you both!!! I'm using ref pointers elsewhere, so your replies make sense. Thanks for the warning about \@, WGD!
Re: TK::Balloon
by holli (Abbot) on Jan 07, 2005 at 15:04 UTC
    because -msg wants a reference to an array, not an array.