Le 18/02/2016 08:24, $Bill a écrit :
> On 2/17/2016 03:15, Vincent Lequertier wrote:
>>
>
> I'd get rid of the '$'s in front of '$group1' etc to avoid the '$ip =~
> s/^\$//;' below.
>
>> How can I have the following output?
>>
>> <table1>,"10.100.29.0/24"
>> <table2>,10.100.27.52
>> <table2>,10.100.27.53
>> <table2>,10.100.27.54
>> <table3>,10.100.27.55
>> <table3>,10.100.27.56
>> <table3>,10.100.27.57
>
> My version:
>
> my %vars = (
> 'group1' => '10.100.27.52',
> 'group2' => '10.100.27.53',
> 'group3' => '10.100.27.54',
> 'group4' => '10.100.27.55',
> 'group5' => '10.100.27.56',
> 'group6' => '10.100.27.57',
> );
>
> my @tables = (
> {
> 'ips' => [
> '"10.100.29.0/24"',
> ],
> 'tablename' => '<table1>',
> },
> {
> 'ips' => [
> '$group1',
> '$group2',
> '$group3',
> ],
> 'tablename' => '<table2>',
> },
> {
> 'ips' => [
> '$group4',
> '$group5',
> '$group6',
> ],
> 'tablename' => '<table3>',
> }
> );
> # print (Data::Dumper->Dump([\%vars, \@tables], [qw(%vars @tables)]));
>
> # loop over elements of @table
> for (my $ii = 0; $ii < @tables; ++$ii) {
> # do for each ip in element
> foreach my $ip (@{$tables[$ii]{'ips'}}) { # critical code here
> if ($ip =~ /^\$group/i) { $ip =~ s/^\$//; $ip = $vars{$ip}; }
> printf "%s,%s\n", $tables[$ii]{'tablename'}, $ip;
> }
> }
>
> __END__
>
Your code won't work on my real world environment because $ip not allays
matchs '$groups'. It could be any word btw. So I ended up with this :
print($vars{$table->{ips}[$_]}
? $vars{$table->{ips}[$_]}
: $table->{ips}[0]);
Thank you for your feedbacks!
--
Vincent Lequertier
skysymbol.github.io
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/