Perlで文字列を変数名として認識させるには?

[上に] [前に] [次に]
たら 2000/03/01(水) 18:26:01
foreach文で、データファイルからレコードを($Data1,$data2・・・$data100)のように読み込んだ際に、例えば$data80の値をを操作したいのですが、「80」をフォームから入力させ、文字列「$data」に「80」を付加してプログラムの中で、$data80=の様に変数として
扱いたいのですが、どのようにすればよいでしょうか?

EMI 2000/03/01(水) 18:41:47
そのためのevalです。

$num = '80';
$in = 100;
$data80 = 0;

eval "\$data$num = $in";

これで、$data80に$inの値(100)が入ります。

sekita 2000/03/01(水) 18:51:42
EVALを使用しない方法(その1)

$data80 = "abcdefg";
$i = 80;
$j = "data" . $i;
print ${$j};

EMI 2000/03/01(水) 19:00:10
>sekitaさん
なるほど、確かにそんな方法も使えますね。
実は、今日の昼休みにラクダ本読んで知りました。(笑)

Perl初心者 2000/03/01(水) 19:13:30
>print ${$j};

これ、理解できません。教えて下さい!

B-Cus 2000/03/01(水) 19:16:53
> これ、理解できません。教えて下さい!
ラクダ本を買って、シンボリックリファレンス
(ソフトリファレンス) のところを読めばよいでしょう。

seltza 2000/03/01(水) 21:14:55
私はWebコンテンツはオンラインで勉強する派。
#もちろん必要と思うものは書籍で購入しますが、
#検索が効かないのが非っ常に残念。(^^;

> ラクダ本を買って、シンボリックリファレンス
> (ソフトリファレンス) のところを読めばよいでしょう。

Perlのマニュアルでも勉強できます。

i.e.
#> perldoc perlref

JPerlが入っていれば日本語で得られるのかな?

または日本語化されたマニュアルもけっこうupされているようです。例えば。
http://rananim.ie.u-ryukyu.ac.jp/~kono/perlman/index.html
-> http://rananim.ie.u-ryukyu.ac.jp/~kono/perlman/cat1/perlref.html

ただ、Perlマニュアルはそれだけで読むのはかなりきついです。Perlマニュアルを読むために、何か入門書やリファレンスサイトが必要なくらい。(^^;

とりあえず、
$num = 80;
${'data' . $num}; #...

といったものは、「こういうものだ」と理解されておいた方がいいかもしれません。

Perl初心者 2000/03/02(木) 09:28:50
>ラクダ本を買って、シンボリックリファレンス
>(ソフトリファレンス) のところを読めばよいでしょう。

買ってしまいました。
でも、どこに出ているか捜せない。(かなしい...)

自分なりの解釈では、
>print ${$j};
$jのスカラー値のスカラー値を${〜}で取得し、printするのだと思うんですが...。
${〜}こいつがしっくりこないです。

$hoge{"xxx"}はハッシュのスカラー値参照の{〜}。
if(〜){ $a = 1; } はブロックの{〜}。

もやもや...。

B-Cus 2000/03/02(木) 15:54:09
> $jのスカラー値のスカラー値を${〜}で取得し、printするのだと思うんですが...。
ここでの ${} に特別な意味はありません。

$a は ${a} と等価です。

例えば $_ を表示して、その後に abc と出したくて
print "$_abc" とすると perl は $_abc という
変数を見にいってしまうので、こういう場合は
print "${_}abc" とします。

それと同様に、${$j} は $$j を見やすく書いただけです。

ただ、シンボリックリファレンスに関しては、$j eq 'abc' の
とき、${$j} は $abc と置き換えられるものだ、と理解した方がいいかも。

EMI 2000/03/02(木) 15:57:34
>でも、どこに出ているか捜せない。(かなしい...)
シンボリックリファレンスについては292頁から。
でも、とりあえず4章をはじめから読んでみるのが吉かと。

B-Cus 2000/03/02(木) 15:58:02
> それと同様に、${$j} は $$j を見やすく書いただけです。
ああ、逆に分かりにくいかな…。
直接 ${'abc'} と書く場合は {} は必須だし。

# うまく説明できないので、やっぱり本を読んで。

Perl初心者 2000/03/02(木) 16:19:58
B-Cusさん、EMIさん、ありがとうごさいました。
だいたい、理解できました。

B-Cusさんへ
新たに ${'abc'}がわかりません。$abcと等価ですか?

EMIさんへ
292頁はなんか全然ちがいますし、4章は制御構造です。
もしかして、違う本?
こちら、「はじめてのPerl  近藤嘉雪」です。

EMI 2000/03/02(木) 16:23:55
それは、はっきり言って全然違います。(^^;
ラクダ本ってのは、「プログラミングPerl」の通称です。
著者はLarry Wallで、出版社はオライリーです。
値段は、5000円ぐらいです、確か。

Perl初心者 2000/03/02(木) 16:46:04
おーぅ、ショック!
ラクダが表紙で出版社はオライリーだったので、これか〜って買ったんですが...。
でも、初心者には良さそうな本ですよ... うんうん。損はなさそうです。

B-Cus 2000/03/02(木) 16:51:34
> 新たに ${'abc'}がわかりません。$abcと等価ですか?
あ、そうです。寝ぼけたことを言ってました。

> 「はじめてのPerl  近藤嘉雪」
読んでませんが、おそらくよい本だろうと思います。
ちなみに、この著者は「プログラミング Perl」の
訳者でもあります。

andi 2000/03/02(木) 17:45:40
「はじめての〜」はリャマの本じゃなかったですか?
確か後ろの方に解説があるような。

ぉぃぉぃ 2000/03/03(金) 00:03:31
>ラクダ本
なぁ〜んだ、ラクダの本(図鑑)かと思ってました。
ラクダ本なんて書いたら間違って買っちゃう人がいるかもしれないって!

[上に] [前に] [次に]