ハッシュに格納されている変数を変更したいのですが、エラーが発生し続けました:
"Can't use the string ("SCALAR(0x30f558)") as a SCALAR ref while "strict refs" in use at - line 14.
私の簡略化されたコードは次のとおりです。
#!/usr/bin/perl
use strict;
use warnings;
my $num = 1234;
my $a = 5;
my %hash = (\$num => "value");
foreach my $key (keys %{hash}){
print "Key: $key\n";
#OPTION1: $a = $$key;
}
my $ref = \$num ;
print "Ref: $ref\n";
#OPTION2: $a = $$ref ;
print $a;
このプリントを実行する:
Key: SCALAR(0x30f558)
Ref: SCALAR(0x30f558)
5
$keyと$refの両方が同じ変数を指していることを示しています-$num
また、$keyと$refが同じ場合、OPTION1とOPTION2のコードは同じです。
OPTION2のコメントを外すと、$ aは1234として出力されます。
ただし、OPTION1のコメントを外すと、上記のエラーが発生します。
質問:OPTION1で試みたように、ハッシュを使用して$aを$numに変更するにはどうすればよいですか?そして、なぜこれがそのまま機能しないのでしょうか?
参照:
http
://cpansearch.perl.org/src/CHIPS/perl5.004_05/t/pragma/strict-refs
私はこのコードに厳密に従いました:
use strict 'refs' ;
my $fred ;
my $b = \$fred ;
my $a = $$b ;
ハッシュを導入するまでエラーは発生しませんでした。
ご協力ありがとうございました。
元のコード(機能しません):
#User Defined - here are the defaults
my $a = 122160;
my $b = 122351;
my $c = 'string';
my $d = 15;
my $e = 123528;
#etc.
#Create variable/print statement hash
my %UserVariables = (
\$a => "A: (Default: $a): ",
\$b => "B: (Default: $b): ",
\$c => "C: (Default: $c): ",
\$d => "D: (Default: $d): ",
\$e => "E: (Default: $e): ",
);
#Allow user to change variables if desired
foreach (keys %UserVariables){
print $UserVariables{$_};
chomp (my $temp = <>);
print "$_\n";
$$_ = $temp unless ($temp eq '');
print "$temp\n" unless ($temp eq '');
};
動作する効率の低い方法:
#Alternate Method without loops (not ideal)
my $temp;
print $UserVariables{\$a};
chomp ($temp = (<>));
$a= $temp unless ($temp eq '');
print $UserVariables{\$b};
chomp ($temp = (<>));
$b= $temp unless ($temp eq '');
print $UserVariables{\$c};
chomp ($temp = (<>));
$c= $temp unless ($temp eq '');
print $UserVariables{\$d};
chomp ($temp = (<>));
$d= $temp unless ($temp eq '');
print $UserVariables{\$e};
chomp ($temp = (<>));
$e= $temp unless ($temp eq '');