문제

스칼라 참조 작업을 수행하려고합니다.다음은 내가 성취하려는 것의 단순화 된 버전입니다.나는 현재 Perl 5.10.1을 사용하고 있습니다.

노트 :

* 색상이 동적으로 획득

* SAY 100 또는 붉은 값을 얻으려고

* 나는 이것이 훨씬 쉬운 해시로 훨씬 쉬워 지지만 어떻게 나는 그것을 스칼라로 그것을 할 수 있습니까?

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

$color = "red";

say ${$color};
.

현재 오류= 스칼라 REF "Strict Refs"

도움이 되었습니까?

해결책

수신중인 오류는 use strict 때문입니다. strict refs를 끌 필요가 있습니다.

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

편집 : 이것은 전역 변수에서만 작동합니다. 따라서 our 대신 use vars 또는 my를 사용하여 선언해야합니다. 이것은 perlfaq7 변수를 사용하여 다른 변수를 지정하는 변수를 사용하는 것이 좋지 않은 이유를 보여줍니다.


특정 경우에서 strict 기능을 끄는 것이 좋습니다. 그러나 매우 제한된 범위 내에 포함하는 것이 좋습니다. 따라서 프로그램의 일부에 영향을 미치지 않으므로

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
.

참조 :

다른 팁

해시를 사용하십시오.

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

$color = "red";

say $color_value{$color};
.

그렇지 않으면 "Nofollow"> no strict "refs"; 를 잊어 버렸기 때문에 오류 가보고되었습니다.하지만 그하지 마십시오. .

이미 주어진 답변 이외에 ...

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

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

my $color = \$red;

say ${$color};
.

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