in reply to Attempt at eliminating a global variable

Pass a reference to the array:

call_back(\@data_out, $data_in[$_]); sub call_back{ my ($data_out, $element) = @_; push @$data_out, $element; }

Alternate syntax:

call_back(\@data_out, $data_in[$_]); sub call_back{ our @data_out; local *data_out = $_[0]; my $element = $_[1]; push @data_out, $element; }

Replies are listed 'Best First'.
Re^2: Attempt at eliminating a global variable
by wfsp (Abbot) on Jan 18, 2005 at 19:09 UTC
    Many thanks ikegami.
    Much neater too!

      btw,

      sub scope_test{ my @data_in = <DATA>; my @data_out; for (0..$#data_in){ call_back(\@data_out, $data_in[$_]); } print "$_" for @data_out; }

      can be simplified to

      sub scope_test{ my @data_out; while (<DATA>) { call_back(\@data_out, $_); } print "$_" for @data_out; }

      or even

      sub scope_test{ my @data_out; call_back(\@data_out, $_) while (<DATA>); print "$_" for @data_out; }