in reply to Re^2: Ini files
in thread Ini files

$_ ist the default variable for loops, you don't need a special inside variable.
If you got such a loop (and don't see any commands that could harm your computer), it's wise to
for (keys(%{$ini{$hostnames[$i]}})) { print "Slot: $_\n"; push @slots,$_; print "IfIndex: ${$ini{$hostnames[$i]}}{$_}\n"; push @ifindices,${$ini{$hostnames[$i]}}{$_}; }
This will show you what is happening.

Let's split the lines: $hostname[$i] contains your hostname. This is used as a key for the %ini - hash. So we could simplify it for better understanding as

for (keys(%{$Hostpart_from_INI})) {
$Hostpart_from_INI contains a reference to what Config::INI found for this hostname (the one for the current loop run). It is a Hash-Reference, so we could also write:
for (keys(%Host_Data_from_INI)) {
Okay, now we're here with a simple Hash. Each loop run gets another key from the Hash %Host_Data_from_INI. If you got Problems with $_, we could add it:
for $_ (keys(%Host_Data_from_INI)) {
You should try the following for better understanding:
perl -le 'for (1,2,3) { print $_; }'
You could also add the $_ behind the for or you could use any other variable.
Still with me? Okay, let's write your loop using the simplified form:
for (keys(%Host_Data_from_INI)) { push @slots,$_; push @ifindices,$Host_Data_from_INI{$_}; }
Remember: We changed nothing, the code is still the same. All we did was renaming things and solving references to show what Perl sees when executing the script.