What does this mean in perl $variable_one{$variable_two} and what is it called?

StackOverflow https://stackoverflow.com/questions/8126905

  •  28-02-2021
  •  | 
  •  

문제

I saw this in a piece of code:

if (some_condition) {  
 $index++;  
}  
$index{$some_variable} = $index{$some_variable} + 1; 

What does $index{$some_variable} mean? And why is it used?

Thank you.

EDIT: index is defined as $index=0;

도움이 되었습니까?

해결책

It's retrieving an entry in the %index hash using a key whose value is the value of $some_variable

(Note: There may also exist a scalar named $index but it will occupy a separate namespace. That is, you can have both a hash and a scalar named index and they will not conflict.)

다른 팁

If this code is written correctly, you will have these lines above it:

use strict;
use warnings;
my $index;
my %index;

if (some_condition) {  
    $index++;  
}  
$index{$some_variable} = $index{$some_variable} + 1; 

$index{$some_variable} is referring to a hash, and $index to a scalar. In perl, this is perfectly valid, and %index and $index will be considered two different variables.

This is also a reason why it is so important to use strict. Why use strict and warnings?

Perl has several namespaces

  • $var is a scalar variable
  • @var is an array variable, and $var[$i] is an element of that array.
  • %var is a hash variable, and $var{$i} is an element of that hash.

The $index in the $index++; statement is a scalar. It has nothing to do with the $index{$some_variable} statement that follows it.

The $index{$some_variable} is part of a hash, %index. Hashes (or associative arrays) consist one or more pairs, each pair consisting of a key and a value. The key is used to access the value.:

my %hash = ( key_A => value_A,    # Here $hash{key_A} accesses 'value_A'
             key_B => value_B,    # ... $hash{key_B} gives 'value_B'
             key_Z => value_Z  ); # 'value_Z' returned by $hash{key_Z}

Analyzing $index{$some_variable} = $index{$some_variable} + 1;, the value of $index{$some_variable} is accessed, incremented by one and reassigned to the same key.

See perldoc perlintro for a gentle introduction to variable types in Perl, and perldoc perldsc for more complex data structures.

You might find perldata helpful.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top