[Wellington-pm] A question about scopes
Andrew Boag
andrew.boag at catalyst.net.nz
Tue Mar 21 13:48:02 PST 2006
So does this mean Cliff is up for throwing together an "Authoring Perl
Packages" talk ??? That would be a great topic for a future meeting.
On Tue, 2006-03-21 at 22:48 +1200, Grant McLean wrote:
> On Tue, 2006-03-21 at 21:39 +1200, Cliff Pratt wrote:
> > Erm, anyway, say the main script is like this:
> >
> > use MyGame ;
> > .
> > my @grid ;
> > .
> > .
> > # Recent change - I now pass the grid to the packaged sub and
> > # return it when modified.
> > @grid = MyGame::sub1(@grid) ;
>
> To save all the copying back and forth, you could pass a reference to
> @grid which would allow the module to modify the array back in the
> script:
>
> MyGame::sub1(\@grid);
>
> Then you could learn Gtk2, packages *AND* references.
>
> > .
> > .
> >
> > The package is like this:
> > .
> > package MyGame;
> >
> > # Recent change - This now outside any sub.
> > my @grid ;
> >
> > sub sub1 {
> > # @grid, but which one?
> > @grid = @_ ;
>
> You could grab the reference like this:
>
> ($grid) = @_;
>
> And then refer to an element in the referenced array:
>
> print $grid->[0];
>
> Or loop over all the elements:
>
> foreach my $item (@$grid) {
>
> > .
> > return @grid ;
> > }
>
> But it does sound like your module would benefit from being turned into
> an object. That way you wouldn't need the global for @grid - you'd
> store the reference in the object where it would be available to all
> methods. And if you instantiated two objects, they'd each have their
> own grid.
>
> As you know from my Glade article, I like to arrange for Gtk GUI events
> to call methods on my object(s). That way all the necessary state
> information is available in the object without having to use globals.
>
> That would have the added advantage that you could learn Gtk2, packages
> *AND* references *AND* objects *AND* closures :-)
>
> Cheers
> Grant
>
>
> _______________________________________________
> Wellington-pm mailing list
> Wellington-pm at pm.org
> http://mail.pm.org/mailman/listinfo/wellington-pm
>
More information about the Wellington-pm
mailing list