- ベストアンサー
変数名をプログラム中で作成して値を取り出す方法
sakusaker7の回答
シンボリックリファレンスというからくりを使えば可能です。 perlfaq7 - Perlに関することがら ($Revision: 1.28 $, $Date: 1999/05/23 20:36:18 $) http://perldoc.jp/docs/perl/5.6.1/perlfaq7.pod How can I use a variable as a variable name? (変数を変数名として使うにはどうすればいいですか?) 初心者はしばしば変数名が入った変数を使いたいと考えます。 $fred = 23; $varname = "fred"; ++$$varname; # $fred now 24 ―― ですが、上の引用部の続きにもあるようにシンボリックリファレンスを使うのはお奨めしません。 これは時には動作します。しかしこれは二つの理由により悪いアイデアです。 ―― 一つ目の理由は、このテクニックはグローバル変数でのみ動作するからです。つまり、もし上記の例において $fred が my() で作成されたレキシカル変数の場合、このコードは全く動作しません。プライベートなレキシカル変数を飛ばして、思いがけずグローバル変数にアクセスすることになります。グローバル変数は、簡単に衝突し、一般に拡張性がなく、混乱するコードを作ることになるので、よくないものです。
関連するQ&A
- プログラム名でプログラムが実行できない
#!/usr/bin/perl # calc --計算式 print ("3 * 3 = "); print (3 * 2 ); print ("\n"); #改行 上記のような簡単なプログラムを作ってみました。 ところが、2段目にある「calc」と入力しても 「can not found」と出て実行してくれません。 保存したファイル名で「perl ファイル名」だときちんと実行してくれます。 どこがおかしいのでしょうか? やってみた事は ・which perl →/usr/bin/perl ・「chmod 775 ファイル名」 です。以上、よろしくお願いします。
- ベストアンサー
- Perl
- DOSバッチで変数の値を変数名に設定したいのですが、可能でしょうか?
DOSバッチで変数の値を変数名に設定したいのですが、可能でしょうか? 例として、以下のようにVARという変数に対して、ある文字列を設定し、その文字列の名前の変数の値を別の変数に代入したいのです。 set VAR="TMP" if /i "%VAR%"=="TMP" (SET TEST=%%VAR%%) echo %TEST% ここで求めている挙動は、SET TEST=%%VAR%%の命令によって SET TEST=%TMP% → SET TEST=C:\Windows\Temp のように展開されればいいのですが、実際はSET TEST=%VAR%となってしまいます。 なにか良い方法がないでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- javascriptで変数名
javascriptで変数名を下記のような titleは同じでその後ろに1,2と生成する変数名を forなどで動的に生成するにはどうしたらいいのでしょうか。 生成した変数名に値を入れたいです。 var title1; var title2;
- ベストアンサー
- JavaScript
- メインルーチンの変数をモジュールに渡す
Perlの勉強をし始めの者なんで、恥ずかしい質問ですけど・・・ モジュールの使い方です。 以下のプログラムではTest_module.pmで定義した変数$testをメインルーチンでprintしています。 ***** メインルーチン ***** #perl /usr/bin/perl use Test_module; our $test=10; print $Test_module::test; ***** Test_module.pm ***** package Test_module; our $test=10; 1; これはちゃんと動いています。 ところが逆にメインルーチンで定義した変数$testをTest_module.pmに渡そうとすると、うまくいきません。 以下のプログラムをどう直せばいいのでしょうか。 ***** メインルーチン ***** #perl /usr/bin/perl use Test_module; our $test=10; &Test_module::print_test(); ***** Test_module.pm ***** package Test_module; sub print_test { print $Main::test; } 1;
- ベストアンサー
- Perl
- perl スカラー変数の値をくっつける ストリング
スカラー変数$valueの値が、 タイトル,名前,メールアドレス,コメント というストリングだったとします。 そのストリングの先頭に、 スカラー変数$cntの値(例えば数値の1)を挿入して、以下のようにしたいと思います。 1,タイトル,名前,メールアドレス,コメント この$valueと$cntをあわせたストリングを $allという変数に格納する場合、 $all=$cnt + "," + $value と書くのでいいのでしょうか? ちょっとActionScriptとごっちゃになっていて、 perlにおけるくっつけ方がわからなくなってしまっています。 お助けください。
- ベストアンサー
- CGI
- 配列の値を可変変数を用いて取得する方法について
配列の値を可変変数を用いて取得する方法について 下記のようなソースがあるのですが、$tmp1_1zのような変数の場合、可変変数を用い取得する事は出来たのですが、$hairetsu["tmp2_1z"]のような配列の場合、可変変数を用い取得する事は出来ませんでした。 どちらの例の場合も、$varの中には意図した文字が取得できていると思うのですが、$$varの結果が異なり、どのように記述すれば配列の場合も可変変数の値が取得できるか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 【ソース】 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>title</title> </head> <body> <?php $tmp1_1z = 1; $hairetsu["tmp2_1z"] = 2; $i = 1; $var = 'tmp1_' . $i . 'z'; echo "<p>var=" . $var . "</p>"; echo $tmp1_1z; // 下記は値が取得できます。 echo "<p>\$var=" . $$var . "</p>"; $var = 'hairetsu["tmp2_' . $i . 'z"]'; echo "<p>var=" . $var . "</p>"; echo $hairetsu["tmp2_1z"]; // 下記は値が取得できません。 echo "<p>\$var=" . $$var . "</p>"; ?> </body> </html> 以上、よろしくお願いします。
- ベストアンサー
- PHP
- シェル変数(path)の挙動がわかりません
シェル変数の挙動がわからなくて困っています。 以下のような3ファイルがあります。 % cat /tmp/test_config.sh #!/opt/local/bin/zsh path=($path /tmp) % cat /tmp/test.sh #!/opt/local/bin/zsh . /tmp/test_config.sh echo $PATH echo $path /tmp/test2.sh % cat /tmp/test2.sh #!/opt/local/bin/zsh echo $PATH echo $path which test.sh これを、所有者のユーザで実行するのとsu -c で実行するので挙動が変わります。 % /tmp/test.sh /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/local/bin:/opt/local/sbin:/tmp /usr/bin /bin /usr/sbin /sbin /usr/local/bin /opt/local/bin /opt/local/sbin /tmp /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/local/bin:/opt/local/sbin:/tmp /usr/bin /bin /usr/sbin /sbin /usr/local/bin /opt/local/bin /opt/local/sbin /tmp /tmp/test.sh % sudo su - hogehoge -c /tmp/test.sh /bin:/usr/bin:/usr/ucb:/usr/local/bin:/tmp /bin /usr/bin /usr/ucb /usr/local/bin /tmp /bin:/usr/bin:/usr/ucb:/usr/local/bin /bin /usr/bin /usr/ucb /usr/local/bin test.sh not found この挙動の違いは、何から産まれるんでしょう? .zshrc でそういう設定ができるんでしょうか? .zshenv は使ってません。 (なお、環境変数$PATHを使えば目的は果たせると言うのはわかっています)
- 締切済み
- Linux系OS
- 受け取った変数がファイルに書き込めない
Perlで質問があります。 Perlでフォームから受け取った変数の値($title = “333”)を別にCGI 投げます。Printでは問題なく変数の中身が表示されるのですが Txtに書き込もうとするとうまくいきません。 ちなみに行頭で$title = “333”;すると書き込めます。 うまく受け渡しができていないのでしょうか? 以下ソースです。 #!/usr/bin/perl -w require 'lib.pl'; #########i一応lib.plの中身######### $q = new CGI; $q->charset('EUC-JP'); print $q->header; $title = $q->param('title'); ################################## use CGI; my $fname = 'news.txt'; open(FILE, ">>$fname") or die; print FILE $title ; close(FILE);
- 締切済み
- Perl
- 変数に値を引き渡すについて
Win2000、JavaScript です。 入力フォームでチェックボックスがあります。 現在は... ------------------------- <script language="javascript"> <!--// var strSelectValue; function SetValueC2(objCheck) { strSelectValue = objCheck.value; } //--> </script> <BODY> <FORM METHOD="POST" NAME="MainForm"> <input type="checkbox" name="C2" value="1" onclick="SetValueC2(this)"> ------------------------- のように、同じフォーム上で チェックがされたら SetValueC2() へ 値 "1" を引き渡して、 変数 strSelectValue に値を入れています。 それを、 同じフォーム上ではなく function SetValueC2(objCheck) { strSelectValue = objCheck.value; } の部分を別ファイル(.js)へ引き渡ししたいのですが、 引き渡し方がわかりません。 多分 onclick="SetValueC2(this) の部分が違うと思うのですが... どなたか教えてください 宜しくお願いします。
- 締切済み
- JavaScript
- 変数など厳密なプログラムが書きたいのですが、どうすればよいでしょうか?
PHPで関数の引数に渡すとき、以下のように$aaを$aとしてしまった場合に 関数内の$idは値がありませんが、関数内でこれを検出することができるのでしょうか? Perlなら use strict;とし、my等で定義されていない変数はすべて警告表示されますが、PHPはスルーです。 変数など厳密なプログラムが書きたいのですが、どうすればよいでしょうか? $aa = 1; test($a) function test($id){ ... }
- ベストアンサー
- PHP
お礼
お礼遅れました。リンク先を参照してみました。 $$varname --> $fred --> "23"というなのだと理解しました。 また、この方法は被参照変数がGlobal変数の場合という注意事項も理解しました。 最後の手段ということで他の方法も検討してみることにします。 どうも有難うございました。