On Fri, Feb 3, 2017 at 7:18 PM, SSC_perl <p...@surfshopcart.com> wrote:
> I have the following sub that creates a log file using > Data::Dumper. It also lists the name of each of the variables that it’s > fed. It works great except for one problem - every line is appended with “ > = undef;” (minus the quotes). > > I’ve tried stripping it out of $var_value with regex but that > doesn’t work, so it appears that Data::Dumper is adding that text during > the print command. > > Does anyone know how I can eliminate that extra text from being > printed? My searches have come up empty. > > Thanks, > Frank > > -------------------------------------------- > > datadump('log_name', '>>', > "database $database", > "matches $matches", > "image $image", > ); > > sub datadump { > my $filename = shift; > my $write = shift; > my @var_info = @_; > no strict; > open(my $log, $write, "temp_logs/TESTS-$filename.log"); > use Data::Dumper; > foreach my $var (@var_info) { > my @vars = split (/,/ => $var); > my $var_name = '$'.$vars[0]; > my $var_value = $vars[1]; > print {$log} Data::Dumper->Dump( [$var_value], [$var_name] ); > $count++; > } > close($log); > use strict; > } > > Are you expecting variables $database, $matches, and $image to have commas in them? If not, your split command is returning a one element array - printing the one element ($var_name) and then printing undef for $var_value. For instance, run the following script: [Start Code] use strict; use warnings; my $count = 0; my $matches = 'first,second,third,fourth'; my $image = "abc"; my $database = 'theDatabase'; datadump('log_name', '>>', "database $database", "matches $matches", "image $image", ); sub datadump { my $filename = shift; my $write = shift; my @var_info = @_; no strict; # open(my $log, $write, "temp_logs/TESTS-$filename.log"); use Data::Dumper; foreach my $var (@var_info) { my @vars = split (/,/ => $var); my $var_name = '$'.$vars[0]; my $var_value = $vars[1]; # print {$log} Data::Dumper->Dump( [$var_value], [$var_name] ); print Data::Dumper->Dump( [$var_value], [$var_name] ); print "\n\nvar_value: $var_value\nvar_name: $var_name\n\n"; # line 29 $count++; } # close($log); use strict; } [End Code] I get the following output: $database theDatabase = undef; Use of uninitialized value $var_value in concatenation (.) or string at testit.pl line 29. var_value: var_name: $database theDatabase $matches first = 'second'; var_value: second var_name: $matches first $image abc = undef; Use of uninitialized value $var_value in concatenation (.) or string at testit.pl line 29. var_value: var_name: $image abc HTH, Ken