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


in reply to Unable to print the contents of an array reference passed from the main pgm to the flat file

Hi,

As per the given details, Its not clear what really is your requirement. If getting the contents of 6th argument($rateType ) means, You have to access the array as @$rateType.

It would be lot helpful if you mention the requirement with sample input and details about how this subroutine is called etc

Regards,
Murugesan Kandasamy
use perl for(;;);

  • Comment on Re: Unable to print the contents of an array reference passed from the main pgm to the flat file

Replies are listed 'Best First'.
Re^2: Unable to print the contents of an array reference passed from the main pgm to the flat file
by Anonymous Monk on Aug 23, 2010 at 14:36 UTC

    The above function being called via the following

    &pkoutFile($OUTFP, ';:=~',"301","WPSPD", $valDate1, "SPREAD", \@retArr +ay);

    where \@retArray is the array reference which contains the result set. We are able to access the contents of the result set in the above function, but unable to copy the contents to the hash variable @ff. Code snippet for this is given below. $rowsHdl is the array reference

    # determine the field names if ($colNamesHdl) { @ff=(); for ($i=0; $i <= $#$colNamesHdl; $i++) { push(@ff, $$colNamesHdl[$i]); } } else { $k = $$rowsHdl[0]; @ff = keys(%$k); } $j = $#$rowsHdl; for ($i=0; $i <= $j; $i++) { @paramVals = (); foreach $k (@ff) { $k1= $k; $k1 =~ s/(^[\n\r\s\t]+)|([\n\r\s\t]+$)//g; $val = $$rowsHdl[$i]->{$k}; push(@paramVals, $k . $delim2 . $val); }
      I would suggest adding some print Dumper statements in to make sure that you have the kind of thing that you think that you have...

      Running some simple test should provide some light on what data this pkoutFile sub is really getting. I simplified your statement to input the sub's input args - avoid using indicies unless you have to - Perl is designed so they aren't needed nearly as often as in other languages.

      #!/usr/bin/perl -w use warnings; use Data::Dumper; pkoutFile($OUTFP, ';:=~',"301","WPSPD", $valDate1, "SPREAD", \@retArray); sub pkoutFile { my( $outFH, $delims, $branchID, $sourceSystem, $valDateY4MD, $rateType, $rowsHdl, $colNamesHdl)= @_; print Dumper \$rowsHdl; #$colNamesHdl is undefined in this case #so, it appears that this following code is executed $k = $$rowsHdl[0]; # $rowsHdl->[0] print Dumper \$k; @ff = keys(%$k); print Dumper \@ff; }
      update: I noticed that for example the k1 value has a calculation done on it, but is never printed. With further looking, if the intent of the regex you want is to remove leading and trailing spaces, I would suggest this:
      foreach ($delims, $branchID, $valDateY4MD, $sourceSystem, $rateType) { s/^\s+//; #remove leading spaces s/\s+$//; #remove trailing spaces }
      This sets $_ to each of the scalar variables in turn and then runs 2 simple and fast regex'es that do not require the /g switch. In this case $_ is an alias for the variable (like $delims) and changes in the loop are reflected in changes to the actual variable.