2016-12-02 6 views
-2

perlの任意の変数の値に格納されている値を取得する必要があります。例えば - $使用して値を$ bをフェッチする方法を今すぐperlの任意の変数の値に格納されている値を取り出す方法

$a = 'b'; 
$b = '10; 

+0

'$ a'は(スカラー)_variable_であり、値として文字列' b'(引用符 'b'でコーディングされています)を持ちます。あなたが尋ねるこの '$ b'は、他にはまったく無関係な、_variable_でしょう。 – zdim

+0

@zdim Ok ..それを行う方法はありますか。 – sas

+0

しかし、何をするには?あなたは "_fetch value $ b'_"と言っています - それはどういう意味ですか?値 '$ b'はありません。これは他の変数です。あなたのコード '$ a = 'b''には" _value '$ b'_"がありません。 – zdim

答えて

3

Here is a great summary of why it's a bad idea to use a variable as a variable name

私は幼児に銃を装う方法を教えるようなので、それを行う方法を教えていません。

ここに必要なものはhashです。ハッシュは、キーと値のペアであるperlデータ構造です。

#!/usr/bin/env perl 
use strict; 
use warnings; 

my %stuff; 
$stuff{'b'} = 10; 

my $target = 'b'; 
print $stuff{$target}; 
+0

素晴らしい感謝.. :-) – sas

-3

私は自分のコードでこのアプローチを個人的に使用しませんでしたが、evalを使用して1つの変数の文字列値を別の変数のperl変数名として評価することができます。

perl -e '$a='b'; $b=20; print eval("\$$a"), "\n";' 
20 

しかし、これは素晴らしい方法ではありません。あなたが他の変数の文字列名に基づいてある変数から値を得ることができる理由を説明したなら、あなたの質問はより良い答えになるでしょう。

+2

'良い方法ではない/本当にひどい方法/ ' – Sobrique

+2

' eval'は誤解を招く:それを必要としない。'perl -e '$ a =' b '; $ b = 20; print $$ a、 "\ n" ''はうまく動作します – Borodin

+0

@Borodin - ああ、私はそれを実現しませんでした –

1

あなたがしようとしていることは、symbolic referenceと呼ばれています。バージョン5以前では、これがPerlで参照を使用する唯一の方法でした。今日では、推奨されていないと考えられ、避けるべきです。代わりにハッシュを使用してください。私は例を提供しているだけなので、コードを維持して排除する必要があります。

記号参照は、動的変数に対してのみ機能します。つまり、変数はourまたはuse varsで宣言されます。また、それが機能するためにはuse strict refsをオフにする必要があることに注意してください。

use strict; 
use warnings; 

my $x = 'y'; 
our $y = 10; 

{ 
    no strict qw(refs); 
    print ${$x}, "\n"; 
} 

ところで、あなたはまた、$a$bを使用しないようにしてください。それらはPerlのsortによって使用され、混乱を招く可能性があります。

関連する問題