#!/usr/bin/perl use strict; use Data::Dumper; # testing _get_csv local *MCVE::MCVE_Ub = sub { [qw/ 333 444 /] }; local *MCVE::MCVE_NumRows = sub { 3 }; local *MCVE::MCVE_NumColumns = sub { 2 }; my @columns = ('foo', 'bar'); local *MCVE::MCVE_GetHeader = sub { shift @columns }; my @rows = qw/ 333 aaa 444 bbb 555 ccc /; local *MCVE::MCVE_GetCellByNum = sub { shift @rows }; my $report = _get_csv(); print Dumper $report; sub _get_csv { my $rows = MCVE::MCVE_NumRows(); my $columns = MCVE::MCVE_NumColumns(); my %report; my @headers; my @data = ({}) x ($rows-1); # need an extra for the header foreach my $column ( 0 .. $columns - 1 ) { push @headers, MCVE::MCVE_GetHeader( $column ); } $report{headers} = \@headers; foreach my $row ( 0 .. $rows - 1 ) { my @temp; foreach my $column ( 0 .. $columns - 1 ) { push @temp, MCVE::MCVE_GetCellByNum($column,$row ); } warn "Temp: '@temp' added to row $row "; @{$data[$row]}{ @headers } = @temp; } $report{data} = \@data; return \%report; }