use strict;
use warnings;
my %h = ('a'=>'123','b'=>'xxx','c'=>'');
my %newhash;
for(keys %h){ $newhash{$_} = $h{$_} if $h{$_} ne '' };
print join(",", keys %newhash)."\n";
####
use strict;
use warnings;
my %h = (
'a' => 'aaa',
'b' => ''
);
for(keys %h){
next if $h{$_} eq '';
my $evalstr = "\$$_ = '$h{$_}';";
print "eval: $evalstr\n";
eval $evalstr;
die "eval $@" if $@;
}
print "a=$a\n";
####
#!/usr/bin/env perl
#use strict;
use warnings;
my %params = (
'default-0' => ['lakja', 'haljl', 'alka'],
'default-1' => 'abc',
'default-2' => [1, 54, 83, 23],
'default-3' => [],
'default-4' => '',
'default-5' => '2019-06-26 00:00:10',
);
my %cor = (
'default-0' => '@arr_0',
'default-1' => '$scal_1',
'default-2' => '@arr_2',
'default-3' => '@arr_3',
'default-4' => '$scal_4',
'default-5' => '$date_5',
# etc
);
my $evalstr;
for(keys %params){
my $varname = $cor{$_};
die "var not found for $_" unless defined $varname;
if( $varname =~ /^\$/ ){
next if $params{$_} eq '';
# quote value because it's a string: very basic rule of thumb...
$evalstr = "$varname = '$params{$_}';";
} elsif( $varname =~ /^@/ ){
next if @{$params{$_}}==0;
$evalstr = "$varname = ".'@{["'.join('","',@{$params{$_}}).'"]};';
} else { die "can't handle $varname = ".$params{$_} }
print "eval: $evalstr\n";
eval $evalstr;
die "eval $@" if $@;
}
print '@arr_0='."@arr_0\n".'$scal_1='."$scal_1\n";
####
Possible unintended interpolation of @arr_0 in string at b.pl line 45.
Name "main::arr_0" used only once: possible typo at b.pl line 45.
Name "main::scal_1" used only once: possible typo at b.pl line 45.
eval: @arr_0 = @{["lakja","haljl","alka"]};
eval: $date_5 = '2019-06-26 00:00:10';
eval: @arr_2 = @{["1","54","83","23"]};
eval: $scal_1 = 'abc';
@arr_0=lakja haljl alka
$scal_1=abc