'mutiple {} in perl script
I have this syntax in a perl script and I don't know what it means:
$string.= "$$info{$id}{free}\t";.
I am very new to pearl (first time reading a perl script) and I didn't find any useful information for this.
Solution 1:[1]
$info is a hash reference. This refers to a multi level data structure, with the first level key set by another variable $id. Your structure might look something like this:
my $info = {
1 => {
free => 2,
used => 3,
},
2 => {
free => 1,
used => 0,
},
};
The $id in this example would be 1 or 2.
You can read about this in more detail in perlreftut.
Your code takes the value from inside the data structure and appends it to a variable $string followed by a tab character. It looks like it's building a tab separated file, similar to a CSV file.
Solution 2:[2]
As per Perl Dereferencing Syntax, $$info{ $id } can also be written as $info->{ $id }. (I'm not alone in finding the latter much clearer.)
$info->{ $id }{ free }
is short for
$info->{ $id }->{ "free" }
This is just just following two hash element dereferences chained into a single expression:
my $anon = $info->{ $id }; $anon->{ "free" }
HASHREF->{ KEY } is used to get the value of a hash element given a reference to a hash and the key of the element.
This means that $info is expected to be a reference to a hash. $info->{ $id } gets the value of the element with the value of $id for key.
Similarly, $info->{ $id }/$anon is expected to be a reference to a hash. $anon->{ "free" } gets the value of the element with key free.
For example,
my $info = {
machine01 => {
free => 100,
used => 200,
},
machine02 => {
free => 50,
used => 450,
},
};
my $id = "machine01";
say $info->{ $id }{ free }; # 100
See perlreftut
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | simbabque |
| Solution 2 |
