- ベストアンサー
$in{'~'}を$~に変換
CGIを改造中です。 変数の処理なのですが、サブルーチン内で利用するときに「$in{'~'}」と言う形でしか表示してくれません。これを「$~」の形にしたいです。 数が少なければ「$~ = $in{'~'}」を個数書けばいいのでしょうけど、結構数があるので、何か簡単な方法で変換できないかと考えています。 良い方法があれば教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ハッシュのままで何か不都合があるのかなと 疑問に思いつつ・・・ #実際ハッシュは #「(変数の)値に別の値を対応させる」 #ために存在するわけだから けど,まあ,やろうと思えばkeys関数でできますよ. %in=( 'X' => 1, 'Y' => 2, 'Z' => 3, ); for $key (keys %in){ ${$key}=$in{"$key"}; print "key; $key ${$key}\n"; } print "$X $Y $Z"; strictとwarningsのプラグマを外さないといけないので 副作用の方が大きいでしょうが.
その他の回答 (3)
- maura
- ベストアンサー率46% (48/104)
#2 の strictとwarnings の話は、無視して構いません。 このキーワードで”ピン”とくる人だけに 対しての注意書きです。
- Tacosan
- ベストアンサー率23% (3656/15482)
「$~ = $in{'~'}; を実行する」のが (基本的には) #2 の for 文なんだけどなぁ. だから, #2 を試せば問題は氷解するはずなんだけど....
- mihosaku3
- ベストアンサー率60% (3/5)
私はPerlしか知らないので、そのCGIスクリプトがPerlであれば、の話になってしまいますが・・・ 格納先はスカラー変数じゃないとダメなのでしょうか? だとすると($one,$two,$three,$four,$five....)=values %in; という方法しか私には思いつかないです・・・。 配列でもよければ、 @form=values %in; で一気に格納できるのですが・・・。
補足
返答ありがとうございます。 現在、データベース的なものを作ろうとしています。 そして、その結果(レコード)をhtml出力しようとしています。 その「htmlファイルに出力」をする際、「新規作成」と「修正」の処理をさせる必要がありますよね。 html作成部分を、「新規作成」と「修正」の部分で共用しようと考えています。 しかし、「新規作成」の時は「$~」でちゃんと出力するのですが、修正時は「$in{'~'}」でないと出力してくれません。 その為、「$in{'~'}」を「$~」の形に修正する必要があります。 さて、ご指摘のとおり、やってみたのですが、どういう法則かわからないのですが、うまく当てはまりません。ずれて保存されている感じです。(もしかして、フォームの順番順?) その他の方法があればお願いします。
補足
すみません。方法が良くわからないのですが… やりたいことは#1さんへの補足に記入してあります。 手順としては… 新規データ記入フォーム→ログへの書き込み→html出力。 この場合、$~でhtml出力サブルーチンへデータが移動します。 修正データ入力→ログへの書き込み→記事Noのhtmlファイル削除→html出力。 この場合、$in{'~'}で修正サブルーチンへデータが移動します。 と言うことで、html出力の手前で「$~ = $in{'~'}」と言う処理をさせたいです。 何か良い方法は無いでしょうか?