Хеш хешей в perl - PullRequest
       1

Хеш хешей в perl

1 голос
/ 29 июня 2010

Я пытаюсь использовать хэш хэшей, как это -

#!/usr/bin/perl -w
use strict;

my %hash = ();

sub hash_populate
{
    my $name = "PQR,ABD,XYZ";
    my @parts = split(/,/,$name);
    my $i = $parts[0];
    my $a= $parts[1];
    my $b = $parts[2];

    $hash{$i} = {"A" =>$a,"B" => $b};
    my $c =  $hash{$i}{"A"};
    print $c;
}

Я получаю сообщение об ошибке вида

Can't use string ("HASH(0x16c43c)") as a HASH ref while "strict refs" in use

Тот же код работает, когда use strict неподарок.Может кто-нибудь сказать мне, почему?

1 Ответ

1 голос
/ 30 июня 2010

Ну, так как я попробовал это в 5.8.7 со строгим, и это сработало, я не могу не думать, что код, который вы на самом деле выполняете, был искажен каким-то образом, это не так, и "Это работало без строгого" означает, что это не умер Perl позволяет вам делать все, что вы хотите, и позволяет вам самим решать проблемы.

Так что ответ

1) код работает (для игрушечного кода) на 5,8

2) "это работало без строгих правил" - это распространенное утверждение среди новичков в Perl, и пока я не увижу некоторый код, который пытается структурировать хеш-ссылку, я не могу сказать ничего другого.

3) Почему это «работает без строгих правил» - это сочетание того, насколько вы подходите под этот шаблон, как настоящий код искажен, и тот факт, что Perl позволит вам выстрелить себе в бесчисленное количество раз при строгом отключении - и иногда вы будете думать, что это сработало.

4) Что-то на самом деле делает работает без строгого, и они предназначены для. То есть отключение стриктур (no strict 'refs';) означает, что вы намеренно делаете случайную операцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...