Pergunta

Eu estou tentando fazer algumas escalar obra de referência.Aqui é uma versão simplificada do que eu estou tentando realizar.Atualmente, estou usando perl 5.10.1.

Notas:

*cor dinamicamente é obtido

*tentar obter um dizer 100, ou o valor vermelho

*Eu percebo isso, é muito mais fácil fazê-lo com um hash, mas como posso fazer isso com escalares?

$red = 100;
$blue = 150;
$green = 200;

$color = "red";

say ${$color};

Erro atual = ESCALAR ref enquanto "estrito refs"

Foi útil?

Solução

O erro que você está recebendo é por causa do use strict.Você precisa desligar strict refs.

no strict 'refs';
say ${"$color"}; # "" are optional, I want to show it's about the string

Editar: Note que isto só funciona em global variáveis.Então, você precisa declará-los com our ou use vars em vez de my.Isto está documentado no perlfaq7 e mostra por que não é uma boa idéia usar variáveis para o nome de outras variáveis.


É OK para desligar um strict recurso em certos casos.Mas lembre-se que é uma boa prática para contê-lo dentro de um escopo muito limitado de modo a não afetar partes do seu programa que é melhor não ter esta desligado.

use strict;
use warnings;
use feature 'say';

our $red = 100;
our $blue = 150;
our $green = 200;

my $color = "red";
{
  no strict 'refs'; # we need this to say the right color
  say ${$color};
}
# more stuff here

Veja também:

Outras dicas

Usar um hash, que é o que eles são para:

my %color_value = (
    red => 100,
    blue => 150,
    green => 200,
);

$color = "red";

say $color_value{$color};

Caso contrário, o erro foi reportado, porque você só se esqueceu de fazer no strict "refs";.Mas, por favor, por favor não faça isso.

Além disso, para as respostas já dadas...

use strict;
use warnings;
use feature qw( say );

my $red = 100;
my $blue = 150;
my $green = 200;

my $color = \$red;

say ${$color};
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top