perl
$scalar = 1;
@list = ( $scalar, $scalar, $scalar );
$list[1].
. : $hash{ name1 }
%hash = ( 'name1', $scalar, 'name2', $scalar, 'name3', $scalar )
, , NOTICE: () .
.
,
$sigil , @ .
, $ sigil:
$scalar = $hash{ name1 };
$scalar = $list[ 1 ];
, @ sigil:
@list2 = @list1;
@list2 = @list[ 1, 3..5 ];
@list2 = @hash{ 'name1', 'name3' };
perl . .
$ref = \$scalar;
$ref = \@list;
$ref = \%hash;
$ref , . , $ref, .
$scalar = $$ref;
@list = @$ref;
%hash = %$ref;
. - . ->
[], perl, ,
{}, perl, :
$scalar = $ref->[ 1 ];
$scalar = $ref->{ name1 };
: - $sigil
, @sigil. :
@list = @$ref[ 1, 3..5 ];
@list = @$ref{ 'name1', 'name2' };
1st: $ref - . $ , one 'ref'
2nd: @$ref - $ref. @ , .
3rd-a: "1,3,4,5" (: [])
3rd-b: 'name1', 'name2' (: {})
Ok. , . :
@list = ( 1, 2, 3, 4, 5 );
%hash = ( 'a', 1, b => 2 );
@list2 = ( \@list, \%hash, 3, 'y' );
%hash2 = ( name1 => \@list2, d => 4 );
%hash2 = ( 'name1', \@list2, 'd', 4 );
$href = \%hash2;
=> - , .
hash2:
$scalar = $hash2{ name1 };
$scalar = $href->{ name1 };
$href-> %hash2
hash2:
@list = @hash2{ 'name1', 'd' };
@list = @$href{ 'name1', 'd' };
@$href %hash2
$scalar = $hash2{ name1 };
$hash2 , % hash2. ;
$list_ref = $hash2{ name1 };
$scalar = $list_ref->[ 1 ];
$list_ref , . ->[ , . $list_ref @list2, \%hash.
:
$scalar = $hash2{ name1 }->[ 1 ];
, : '$ list_ref' '$ hash2 {name1}'
, [ 1 ] %hash. , , $:
$hash_ref = $hash2{ name1 }->[ 1 ];
$scalar = $hash_ref->{ b };
$hash_ref , . ->{ , . - $hash_ref %hash, 2.
:
$scalar = $hash2{ name1 }->[ 1 ]->{ b };
, : '$ hash_ref' '$ hash2 {name1} → [1]'
hash2 %hash2. $href? :
$scalar = $hash2{ name1 };
$scalar = $href->{ name1 };
, , ->. :
@l = ( 1, 2, 3, 4 );
$scalar = $l[ 1 ];
$hr = \@l;
$scalar = $hl->[ 1 ];
%h = @l;
$scalar = $h{ 1 };
$hr = \%h;
$scalar = $hr->{ 1 };
-> [ { -.
$href?
$scalar = $hash2{ name1 }->[ 1 ]->{ b };
$scalar = $href->{ name1 }->[ 1 ]->{ b };
->
$scalar = $hash2{ name1 }[ 1 ]{ b };
^-- first dereference
$scalar = $href->{ name1 }[ 1 ]{ b };
^--first dereference
. perl LIST LIST.
sub test {
return @_;
}
, .
return \%hash;
return \@list;
return $scalar;
return ( $scalar, \%hash, \@list );
(fn())[ 0 ];
(fn())[ 1 ]->{ name1 };
(fn())[ 2 ]->[ 1 ];
$hashTable {$ login}, % hashTable {$ login} ?
. $ %hashTable. $hashTable {$ login} .
, @ sigil:
@list = @hashTable{ 'login1', 'login2' };
$l1 = 'login1';
$l2 = 'login2';
@list = @hashTable{ $l1, $l2 };
return\$hashTable {$ login};
. . return $hashTable {$ login} .
2. $authHash $authHash {$ something},
, %hashTable - , $login. :
$login1 = { name => 'Vasiliy', pass => 'secret' }
%login2 = ( name => 'Petrovich', pass => '^&UDHJ' );
%hashTable = (
vasya => $login1,
piter => \%login2,
)
, authUser sub
my $authHash = authUser( 'vasya' );
- $authHash, ->
if( $authHash->{ pass } eq $password ) {
...
}
authUser , loadUsers : sub loadUsers { .... return\%hashTable; }
my $usersDB = loadUsers;
if( $usersDB->{ $login }->{ pass } eq $password ) {
print 'You have granged access';
}
else { ... }
2: - , ?
. . , , .
AS ADVICE
:
- hashref listref.
-> .- $ sigil char.
.
$list = [ 1, 2, 3 ];
$hash = { a => 1, b => 2 };
$list->[ 2 ];
$hash->{ b };
:
@l = @$list;
%h = %$hash;
@l = keys %$hash;
@l = values %$hash;