perl - Passing array by reference -
i have written simple perl program (driver.pl) passes array reference , calls subroutine add in calculate.pm module.
the calculate.pm module pushes 2 values 100 , 500 array.
when print array in driver.pl file, prints nothing.
driver.pl file:
use calculate; our @my_array; sub init() {     $x = 1;     calculate::add($x, /@my_array); } init(); (@my_array) {     print $_; #prints nothing. }   calculate.pm
sub add() {     ($x, @arr) = @_;     push (@arr, 100);     push (@arr, 200); } 1;      
first of all, here code want:
file calculate.pm:
package calculate;  sub add {   ($x, $arrayref) = @_;   push @$arrayref, 100, 200; }  1;   file driver.pl:
use calculate;  @array;  sub init {   calculate::add(1, \@array); }  init();  foreach (@array) {   print "$_\n"; }   what did do? well, fixed (syntax-)errors:
- the reference operator 
\nor/. - loops 
fororforeachneverfor each. thereeachfunction allows iterate on collections, isn't useful here. - don't use prototypes 
(), unless know exactly do, mean, , why have use them here. - put explicit package declaration library files.
 
then there severe style issues:
- name packages uppercase names – lowercase names reserved “pragmas”.
 - declare variables 
my, unless need global/dynamic variables. don't. 
and newline after print can't hurt.
in our add function, receive array reference. (if know c++: perl references pointers, not c++ references). references scalars, put $arrayref. actual array, dereference @$arrayref – don't copy, or aren't manipulating original.
you slurp remaining arguments array, my ($x, @list) = (1, 2) puts 2 array. in case, 2 array reference! therefore @list contains single element our array reference – isn't same array.
this still isn't elegant code , has architecture problems, should @ least compile.
Comments
Post a Comment